- 博客(77)
- 收藏
- 关注
原创 App 进程初始化binder、获取ServiceManager服务
数据结构ProcessStateIPCThreadStateApp进程启动Init进程启动了zygote进程、system_server进程、ServiceManager进程、lwkd服务等zygote并没有利用binder通信,而是利用socket接收信息,在执行ZygoteInit.main()后便进入runSelectLoop()循环体内,当有客户端连接时便会执行ZygoteCon...
2020-02-05 15:30:06 899
原创 Kotlin DSL语言初试
class DslRequest { private lateinit var mUrl: String private lateinit var mMethod: String private lateinit var mSuccess: (DslResponse) -> Unit private lateinit var mFailed: (DslResp...
2020-01-22 15:48:22 290
原创 Android Framework层看硬件加速
Android 从Android3.0(API Level 11)开始就支持了硬件加速,在target api >= 14会默认开启,利用GPU代替CPU绘制,软加速是利用Skia,而硬件加速是利用OpenGL绘制。缺点是增加了内存占用。本文只是在java层去看硬件加速,没有深究jni层如何绘制。RenderNode 每个View都有一个RenderNode与之对应Render...
2020-01-16 00:52:46 457
原创 ServiceManager与binder驱动的交互
文章目录ServiceManger 的初始化binder_openbinder驱动的BINDER_VERSION命令binder_become_context_managerbinder驱动的 BINDER_SET_CONTEXT_MGR命令binder_loopServiceManager loop流程binder驱动的BINDER_WRITE_READ命令binder_ioctl_write_...
2020-01-13 23:29:09 450
原创 binder 驱动的操作
文章目录Binder驱动四个基本操作初始化字符设备打开binder驱动设备mmap 分配 binder_bufferkmalloc、kzalloc、vmallocbinder_mmap未做用户空间和内核空间的映射binder_update_page_range进程跟驱动的操作交互ioctl 基本流程ioctl 命令binder_write_read命令binder_thread_writebind...
2020-01-13 23:06:51 1139
原创 RecyclerView 绘制、复用、对比ListView
之前学习ListView是为了更好地学习RecyclerView,没想到拖了这么久。RecyclerView比ListView更加地复杂,主要从两个方面学习:RecyclerView 绘制流程RecyclerView 缓存复用ListView和RecyclerView缓存比较RecyclerView 涉及的类LayoutManager : 负责子View的measure及layo...
2020-01-13 22:48:03 540
原创 binder 驱动数据结构
binder驱动中的重要的数据结构hlist_node: linux内核哈希表/hash桶的头结点struct hlist_head {struct hlist_node *first;//指向每一个hash桶的第一个结点的指针};//hash桶的普通结点struct hlist_node {struct hlist_node *next;//指向下一个结点的指针struct h...
2020-01-04 21:35:05 760
原创 MQTT协议理解和分析
文章目录MQTT 困惑和思考MQTT 三个角色消息服务质量 QOSQoS = 0 至多一次QoS = 1 至少一次QoS =2 刚好一次特点和源码消息的ACK机制最终一致性消息的事务支持MQTT 困惑和思考网上有大把对MQ消息队列的资料和分析,大部分都是针对网络协议,具体夸赞了MQ各种好处:低耦合、可靠投递、流量控制等等好处。是各大厂家必备的中间件。当然,我是不理解的,MQTT分明就是建立...
2019-12-17 00:12:26 815 1
原创 SurfaceFlinger学习之路(三)BufferQueue原理
* SurfaceFlinger:系统服务,接收多个源的数据,对它们进行合成,然后发送到显示设备进行显示。* HWComposer:在没有HWComposer之前,SurfaceFlinger将各个Layer的内容用OpenGL渲染到暂存缓冲区中,最后将暂存缓冲区传送到显示硬件。HWComposer是硬件合成器,帮助GPU做一些工作,SurfaceFlinger把多个Surface输出给hwc, hwc按照Surface的属性, 把多个Surface混合成一个Surface, 最后输出到Display
2019-12-13 00:15:01 3318 1
原创 Andriod 录屏:AudioRecord、MediaProjection、MediaCodec、MediaMuxer
Android 为开发者提供了MediaRecorder的类,可以帮助录屏。但是重要的缺陷:MediaRecorder控制粒度很粗,无法完成更多的自定义功能,如对音频数据处理MediaRecorder录制的效果很差,特别是音频效果。为了更好的效果,最终决定利用AudioRecord、MediaProjection、MediaCodec、MediaMuxer几个重要的组件进行录屏。这几个组件都涉及到很多的音视频的知识,建议先看之前的音视频相关的文章介绍。
2019-12-10 09:20:59 3420 4
原创 属性动画原理解析
属性动画属性动画的使用动画监听插值器(Interpolator)估值器(TypeEvaluator)属性动画的两个条件属性动画原理解析
2019-11-10 14:27:21 666
原创 SurfaceFlinger学习之路(二)Surface的创建
介绍了View的绘制流程,最后讲到了WMS与SurfaceSession、Surface之间关系。
2019-10-31 00:41:43 1299
原创 SurfaceFlinger学习之路(一)View的绘制流程
Android 系统启动流程SurfaceFlinger 创建流程Surface 创建流程Surface 显示流程
2019-10-30 00:34:06 1883 1
原创 SystemServer 理解
SystemServer进程,运行多个服务的线程Zygote进程又称受精卵进程,它由app_process启动,Zygote进程最大意义是作为一个Socket的Server端,接收着四面八方的进程创建请求,Android中所有的应用进程的创建都是一个应用进程通过Binder请求SystemServer进程,SystemServer进程发送socket消息给Zygote进程,统一由Zygote进程...
2019-10-20 23:53:33 700
原创 ConcurrentSkipListMap
今天发现了一个新的Java数据类型:ConcurrentSkipListMap,其中内部使用了跳表的数据结构。在看ConcurrentSkipListMap之前先看,什么是跳表?跳表1.有序的单向链表:如果我们需要检索“值6”,需要从头往尾遍历检索,顺序是:1 -> 2 -> 3 -> 4 -> 5 -> 6所用到的复杂度为O(n)2.跳表既然链...
2019-10-20 21:35:32 281
原创 Java ThreadPoolExecutor线程池原理
线程池参数以及简要流程AQS的使用线程池状态worker重要的变量execute流程shutdown流程
2019-10-12 02:08:05 497
原创 Android Usb获取以及读写
Android 6.0 之后提供了StorageManager支持读写U盘。有部分是hide方法需要利用下反射,以下记录下。读取所有U盘符public static List<UsbDevice> readUsbDevice(Context context) { List<UsbDevice> devices = new ArrayList<>();...
2019-10-11 00:36:51 1241
原创 ANR 原理简要分析
最近碰到ANR的问题,需要分析,啊,ANR的问题真的是难受,即使有trace.txt日志也无法看到端倪,ANR问题有时候真的需要随缘,而且会伴随着系统CPU占用过高、memory占用过多的现象,确实难以定位。据此,花了一些时间学习Android ANR 问题的引发和系统如何检测ANR问题。ANR问题简介常见的ANR问题Service ANR问题InputEvent ANR...
2019-09-25 23:40:03 1289
原创 泛型参数解析
获取返回类型Method method = this.getClass().getDeclaredMethod(“execute”, MqttRequest.class, Class.class);Type type = method.getGenericReturnType();@SuppressWarnings(“unchecked”)private Class getClass...
2019-09-24 21:23:12 234
原创 DreamService 和 DreamManagerService 问题分析
问题背景Android官方提供了一个DreamService类以实现屏保的功能,内部提供了两个回调:onAttachToWindow()onDetachToWindow()昨天碰到了一个系统性的问题:在启动DreamService屏保之后,系统的其他App直接startActivity()并不会退出屏保,也就是DreamService并不会收到onDetachToWindow()回调...
2019-09-01 02:24:06 5870 5
原创 Glide(四):强大的图片缓存池和复用机制
Glide有一个很强大的Glide缓存策略和Glide复用机制,之前在里面栽过跟头,借此好好整理总结。
2019-08-27 23:20:20 3390 1
原创 Android Context.getSystemService() 与 ServiceManager 的理解和使用
背景这几天在天天在写Context.getSystemService()获取系统服务,例如在获取窗口服务的时候都会这样写:WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);突然萌生一个问题,就是getSystemService() 每次获取的对应的WindowM...
2019-08-27 23:00:17 5567
原创 Retrofit 原理解析与自定义实现
Retrofit结合OkHttp构成了当前非常流行的Android的网络,Retrofit对OKHttp进行了一层封装,可能入手的门槛高一点,但是使用习惯以后可以说是非常的简洁和高效。并且还可以跟Rxjava结合转化成Obserable,这种链式编程风格深得我心。来了解Retrofit的基本源码原理:动态代理获取MethodMethod从提取出注解参数执行网络操作转换成对应结果本...
2019-08-14 13:28:35 666
原创 espresso无法测试绑定在WindowManager下的布局
问题出现:espresso是Android官方推荐的UI测试框架,非常强大,但是今天遇到一个问题:onView()无法指定一个直接利用WindowManager.add()的View,抛出一个找不到的异常:android.support.test.espresso.NoMatchingViewException: No views in hierarchy found matching网...
2019-08-13 23:52:12 422
原创 ListView 绘制流程解析
LinearLayout绘制流程解析RelativeLayout绘制流程解析ListView绘制流程解析RecyclerView绘制流程解析絮絮叨叨从年初到现在,一直积攒了好多知识点没有学习和总结,待办越积越多,此时此刻立下flag,要在这个可爱的八月把所有的待办解决掉。---- 鲁迅:不,我没说过背景在我刚开始学习Android的时候,ListView是列表实现的首选项,现在因为...
2019-08-02 01:14:04 332
原创 Android 写一个属于自己的Rxjava(二)
目录Android 写一个属于自己的Rxjava(一)Android 写一个属于自己的Rxjava(二)前言先附上github源码
2019-07-25 16:42:59 235
原创 LinearLayout 绘制流程解析
太久没有好好学习Android的基础知识了,趁机好好静下心来学习、输出。LinearLayout绘制流程RelativeLayout绘制流程ListView原理RecyclerView原理protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (mOrientation == VERTI...
2019-07-24 09:08:51 995
原创 Android 写一个属于自己的Rxjava(一)
之所以想要自己动手写一个简单的Rxjava,并不是想证明自己多厉害,而是借助动手来理解Rxjava的思想和源码,实话实说,Rxjava是我看过的源码里面名字取得最迷糊的。看了三四天,硬是把自己搞迷糊了。相反,我尝试自己做一个简单的轮子,发现其实Rxjava的整体思想和实现并不难,但层层的封装真是让人抓不住头脑。不过,只要抓住规律,其实理解起来还是挺简单的。重点在于分清楚:上游发射事件,下游接收...
2019-07-24 09:05:56 186
原创 Android binder连接中,服务端如何知道客户端断开情况
在IPC 利用 binder连接过程中,客户端断连,服务端如何知道呢?这里的客户端和服务端都运行在不同的进程。一般来说,我们使用Android的binder,都直接用aidl帮我们生成java代码,再利用service进行ServiceConnection连接。也许你会说,利用ServiceConnection的onServiceDisconnected()就可以知道断开连接了,可是回想一下...
2019-07-12 23:19:30 4359 4
原创 Android 屏幕刷新机制:ViewRootImpl、Choreographer、Surface、SurfaceFlinger关系
Choreographer VSync SurfaceFlinger
2019-06-27 23:49:40 2066 1
原创 如何计算图片旋转角度?
在项目过程中,需要计算本地图片或者网络图片原来的旋转角度。这部分代码是从Glide的DownSampler类的,这里做一下记录。Glide的类ImageHeaderParser中负责解析Image的头部信息,Glide分成两种情况:DefaultImageHeaderParser 默认的头部,是Glide自定义的头部解析器ExifInterfaceImageHeaderParser 利用了...
2019-03-22 12:18:35 5001 1
原创 Glide原理分析(二):Engine加载流程
上一篇文章《》主要大致地分析了Glide加载图片的整体流程,这一篇主要解决的上一篇遗留的一个问题:Glide Engine 如何加载图片,内部涉及到Glide的缓存模块上篇文章在SingleRequest中获取到了ViewTarget的宽高之后(假定是ImageView),onSizeReady()调用了engine的load()方法loadStatus = engine.load( ...
2019-03-21 18:49:24 980 1
原创 Glide原理解析(一):加载流程分析
Glide 是目前非常流行的图片加载第三方开源库,而且功能极其强大,内部代码复杂程度也极其大。经过一番心理斗争决定还是要好好学习Glide的部分源码设计。
2019-03-21 10:23:47 1774
原创 Android 写一个属于自己的富文本编辑器
之前在看大部分的Android 富文本编辑几乎都是利用webview实现,所以,便有了做一个Android原生的富文本编辑器的主意。样例照惯例先秀一下图: 该富文本编辑器样式仿照印象笔记的Android版,绘制层实现基于Android的span样式。目前已经实现的功能:粗体、斜体、下划线、删除线、上下标、背...
2019-03-19 20:47:13 6122 2
原创 Bitmap疑惑
2. BimapFactory.Options提供了对图片加载解析策略,主要使用到的参数3.Bitmap 加载大图4. ARGB8888 RGB565区别在drawable加载时候的图片内存大小
2019-01-31 18:03:21 479
原创 WindowManagerService Window View 关系(一)
1. Android window 是怎么使用的?2. Window、View、WMS以及ViewRootImpl之间什么关系?1. Activity、WindowManager、Window之间怎么关联2. DecorView、PhoneWindow之间怎么关联(setContentView)3. Activity 怎么创建添加一个Window(从App进程的角度看)4. WMS 怎么创建添加一个WIndow (从WMS进程的角度看)5. Window、View、ViewRootImpl关系
2019-01-28 21:54:10 642 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人