自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 资源 (3)
  • 收藏
  • 关注

原创 Android DataBinding原理分析

一、DataBinding使用本文着重讲解DataBinding原理,使用的例子比较简单,若读者想要了解更多的DataBinding的使用方法介绍,可以自寻相关资料,本文纯属个人理解,若有错误,还望指出(抱拳)在app模块的build.gradle中加入如下配置android { ... dataBinding { enabled = true }}...

2019-12-08 18:23:32 1741 1

原创 Gradle Transform 详解

我们先来看下Android应用程序打包流程:通过上图可知,我们只要在图中红色箭头处拦截(生成class文件之后,dex文件之前),就可以拿到当前应用程序中所有的.class文件,再去借助ASM之类的库,就可以遍历这些.class文件中所有方法,再根据一定的条件找到需要的目标方法,最后进行修改并保存,就可以插入我们的埋点代码。Google从 Android Gradle 1.5.0 开始,提供...

2019-12-05 10:44:24 2792

原创 AOP与AspectJ详解之项目实战

AOPAOP是 Aspect Oriented Programming 的缩写,即“面向切面编程”,通过使用AOP可以在编译期间对代码进行动态管理,一达到统一维护的目的。AOP其实是OOP编程思想的一种延续,利用AOP,我们可以对业务逻辑的各个模块进行隔离,降低模块间耦合度,提高程序的可重用性,进而提高开发效率。利用AOP,我们还可以在无侵入的状态下在宿主中插入一些代码逻辑,从而实现诸如日志埋点...

2019-12-01 21:34:50 389

原创 Mac环境用Shell脚本编译最新版ffmpeg-4.2.1

Mac环境用Shell脚本编译最新版ffmpeg-4.2.1FFmpeg简介FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序FFmpeg是一个多媒体视频处理工具,有非常强大的功能,包括视频采集功能、视频格式转换、视频抓图、给视频加水印等FFmpeg是一套开源免费跨平台的多媒体框架。它提供了录制、转换以及流化音视频的完整解决方案,目前bilibili、抖...

2019-11-17 14:44:47 600

原创 Android事件分发机制源码分析

Android事件分发机制源码分析一、事件定义定义:当用户触摸屏幕时,将产生的触摸行为(Touch事件)事件类型MotionEvent.ACTION_DOWN 手指刚接触屏幕MotionEvent.ACTION_MOVE 手指在屏幕上滑动MotionEvent.ACTION_UP 手指从屏幕上松开MotionEvent.ACTION_CANCEL 非人为因素取消二、事件序列正...

2019-11-01 11:49:43 245

原创 自定义Android属性动画框架

通过本篇文章,你将会了解安卓属性动画的基本架构插值器和估值器在动画中的作用手撸属性动画设想一下,如果你是google的工程师,让你去设计一个属性动画,你该如何设计?在设计属性动画时我们应该要考虑哪些问题?生成动画的api调用约简单越好一个View可以有多个动画,但同时只能有一个在运行动画的执行不能依赖自身的for循环如何让动画动起来我们先来看下属性动画的种类平移动画...

2019-10-29 23:00:12 343

原创 源码分析UI绘制三部曲之draw

众所周知,UI绘制三部曲是measure、layout、draw本篇我们分析ViewRootImpl#performDraw private void performDraw() { if (mAttachInfo.mDisplayState == Display.STATE_OFF && !mReportNextDraw) { r...

2019-10-27 22:49:15 273

原创 源码分析UI绘制三部曲之layout

众所周知,UI绘制三部曲是measure、layout、draw本篇我们分析View#layout private void performLayout(WindowManager.LayoutParams lp, int desiredWindowWidth, int desiredWindowHeight) { mLayoutRequested...

2019-10-27 22:13:36 164

原创 Android组件化工程结构以及项目实施

组件化优点1、代码解耦2、方便多人协作开发3、可复用性高,不同的APP可复用不同组件4、每个组件可独立运行,方便开发调试组件化工程结构[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传**第一层:**空壳app。应用的入口,存放启动页,依赖所有业务组件**第二层:**业务组件。根据不同业务横向拆分出来的业务组件。任何一个业务组件都可以独立出来成为一个应用**第...

2019-10-23 13:00:53 406

原创 从源码角度分析AppCompactActivity#setContentView

之前有一篇文章源码分析了Activity#setContentView,但是目前我们写的Activity基本都是继承自AppCompactActivity,google也是建议继承AppCompactActivity可以提高一些兼容性,今天我们就来一探AppCompactActivity#setContentView的究竟,看看跟Activity#setContentView有何异同。依照之前的...

2019-10-19 22:26:10 471

原创 源码分析UI绘制三部曲之measure

众所周知,UI绘制三部曲是measure、layout、draw本篇我们分析View#measurepublic final void measure(int widthMeasureSpec, int heightMeasureSpec) { ... final boolean matchesSpecSize = getMeasuredWidth() == M...

2019-10-18 22:30:28 165

原创 从源码的角度分析View的绘制流程

温馨提示:以下源码分析会截取源码进行说明,部分方法源码较长会只保留关键代码,其他代码用…省略View的绘制入口是ActivityThread#handleResumeActivityfinal void handleResumeActivity(IBinder token, boolean clearHide, boolean isForward, boolean re...

2019-10-16 08:40:42 151

原创 从源码角度分析Activity#setContentView

我们平时在开发的过程中将一个layout绘制出来是通过Activity#setContentView,那么我们就从setContentView入手来看整个绘制流程。public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) {...

2019-10-14 13:21:38 216

原创 Android9.0应用程序启动过程源码分析

用户从Launcher程序点击应用图标可启动应用的入口Activity,Activity启动时需要多个进程之间的交互,Android系统中有一个zygote进程专用于孵化Android框架层和应用层程序的进程。还有一个system_server进程,该进程里运行了很多binder service,例如ActivityManagerService,PackageManagerService,Wind...

2019-07-11 21:33:52 1306 1

原创 CoodinatorLayout 实现 banner沉浸式+滚动视差+悬浮搜索框+标题置顶复杂联动效果

1.开门见上,先上效果图                                                         代码传送门2.CoodinatorLayout及相关控件简介      CoordinatorLayout遵循Material Design风格,包含在 support Library中,结合AppBarLayout, CollapsingToo...

2018-08-22 21:00:37 5352 9

原创 Hadoop体系结构之HDFS

        上篇讲到了HDFS的设计思想GFS,这篇接着讲HDFS架构。        HDFS全称为 Hadoop Distributed File System, 是 Hadoop 的分布式文件系统的实现。它的设计目标是存储海量数据,并为分布在网络中的大量客户端提供数据访问。HDFS的实现解决了存在于众多分布式文件系统(如 NFS)中大量的问题,具体来说,HDFS实现了以下问题:能够保存非...

2018-04-18 15:36:57 542

原创 大数据之HDFS设计思想GFS

        但凡开始讲大数据的,都离不开谷歌的三篇论文:Google File System(GFS),MapReduce,BigTable。本篇主要介绍谷歌的GFS,后面会介绍Mapreduce和BigTable。        我们先来看一下Linux的体系结构                Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有...

2018-04-18 10:56:44 1156

原创 大数据之Hadoop生态系统概述

一、什么是大数据                首先,我们来了解一下,什么是大数据?大数据(BigData)是指无法在一定时间内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率、多样化的信息资产。由IBM提出的大数据的五个特征(5V):Volume(大量)、Velocity(高速)、Variety(多样)、Value(价值...

2018-04-17 16:44:38 4055 3

原创 热更新之Bugly框架的详细集成

对于广大移动开发者而言,App的版本更新升级是再寻常不过的事。但是当你发现你刚发出去的包有紧急Bug需要修复时,你就不淡定了,又要经过繁琐的传统的App版本更新流程,重新发布一个修复Bug的版本,再将Apk上传到各大应用商店,用户需要花费时间去应用商店重新下载安装。如果Bug比较严重,有些用户可能会失去耐心,直接卸载掉App,于是乎,你们的用户就这样流失了。 传统的更新流程有几个弊端,一是重新

2017-12-20 10:45:41 545

原创 mvp+rxjava2+retrofit2项目框架

上个项目忙完了第一版,在此对上个项目的架构总结下,不断总结分析,才能发现结构的短板,才能搭出属于自己的最完美的架构。**1.分包**我的分包如下图: - adapter:放一些adapter类,属于view层的 - api:放一些网络请求相关的类,如配置retrofit - base:放一些activity、fragment、presenter的基类 - comm

2017-12-13 13:00:53 865

原创 编译后ijkplayer使用文档

第一步:在AndroidStudio中新创建一个工程,在工程文件的libs目录下将你需要支持的平台的so文件复制进去,我全部复制进去了,如图1:                                            图1                                 图 2再将编译后的ijkplayr工程目录下的ijkplayer-java/b

2017-12-08 13:49:17 2039 3

原创 在Mac下编译ijkplayer

最近项目中需要集成播放器来播放拉下来的直播流,看了很多开源的播放器框架,最终选择了B站开源的ijkplayer。ijkplayer是一个基于FFmpeg的轻量级Android/iOS视频播放器。FFmpeg的是全球领先的多媒体框架,能够解码,编码, 转码,复用,解复用,流,过滤器和播放大部分的视频格式。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库liba

2017-12-06 16:33:03 2597

原创 使用RecyclerView遇到notifyDataSetChanged无效

最近项目里集成了环信的即时通讯,现在有这么一个需求,当收到消息时,动态更新整个消息列表的总的未读消息数。效果图如下:                                看看我之前的代码,在消息监听的回调直接调用adapter.setData( getP().loadConversationList()),

2017-09-07 12:34:51 5334

原创 使用LitePal操作数据库

LitePal是一款开源的数据库操作框架,它采用了对象关系映射(ORM)模式,并封装了对数据库的常见的操作,使得不用编写一行SQL语句就可以完成建表和CRUD。          我们来看看怎么使用LitePal操作数据库。          ①在module的build.gradle里面添加依赖:                              dependen

2017-04-12 18:12:48 539

原创 Android自定义View之水波纹显示进度效果

显示进度在我们APP中随处可见,今天我们来撸一撸水波纹进度效果,具体效果请看下图:                                             这是一个自定义View,大家可以明显的看到,自定义View中用到了贝塞尔曲线,我们先来简单了解下贝塞尔曲线。          贝塞尔曲线(Bézier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图

2017-04-01 22:22:02 1399

原创 Android自定义View之圆形比例图(进度条)

在我们APP中,经常会用到如下的一张比例图:                                                    这个比例图可以清楚的展示一个项目所占的比例,同时也可以变成一个圆形进度条:

2017-03-30 17:31:07 1666

原创 安卓设计模式之观察者模式

观察者模式(Observer Pattern)        定义对象间的一(Observable)对多(Observer)的依赖关系,当一个对象的状态发送改变时,所以依赖于它的对象都得到通知并被自动更新。       Observer模式要解决的问题为:建立一个一(Observable)对多(Observer)的依赖关系,并且做到当“一”变化的时候,依赖这个“一”的多也能够同步改变。列举

2017-03-12 16:53:00 474

原创 JobScheduler API 的使用

闲言碎语:    最初,我的boss叫我看下JobScheduler API(可能我们项目中要用到),让我写个使用文档出来,然后给公司其他同事讲讲,但是由于公司项目升级迫在眉睫,写文档这事儿就搁置了,现在有大把的空闲时间了,于是乎接着之前写的部分文档就有了下面文章。本文是我结合谷歌官方对JobScheduler的讲解和网络上各路大神的见解来写的,若有理解不到位处,还望谅解,若有有错误,也欢迎指

2017-03-10 10:02:48 824

原创 安卓开发中禁掉ViewPager预加载问题

ViewPager预加载 ViewPager有一个 “预加载”的机制,默认会把ViewPager当前位置的左右相邻页面预先初始化,它的默认值是 1(看源码),这样做的好处就是ViewPager左右滑动会更加流畅,但是预先加载用户没有看到的页面的数据,会花费用户的一定的流量,所以就有了禁止ViewPager的“预加载”,节省用户流量。...

2017-03-08 00:42:38 940

ijkplayer k0.8.4 编译后得到的各个平台的so文件和ijkplayer-java-release.arr文件

ijkplayer k0.8.4 编译后得到的各个平台的so文件和ijkplayer-java-release.arr文件

2017-12-08

ijkplayer(k0.8.4)编译后的Android工程文件含demo

ijkplayer(k0.8.4)编译后的Android工程文件含ijkplayer-arm64、ijkplayer-armv5、ijkplayer-armv7a、ijkplayer-example、ijkplayer-exo、ijkplayer-java、ijkplayer-x86、ijkplayer-x86_64

2017-12-07

ijkplayer编译后的ios工程文件

ijkplayer编译后的ios文件,包括 IJKMediaDemo、IJKMediaPlayer、IJKMediaPodDemo、tools

2017-12-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除