- 博客(76)
- 收藏
- 关注

原创 Android-全面理解Binder原理
一文打通你对Binder通信机制所有疑惑:- 如何理解Binder通信中的 binder实体、handle句柄?- Binder驱动如何维护binder实体和handle的映射?- Binder能够传递多大的数据?- Binder的“一次拷贝”是如何实现的?- client端如何接收到数据?- servicemanager的初始化和app、服务不同?- 进程隔离、IPC通信的介绍与思考。- 为什么选择 Binder?
2023-02-07 11:45:17
1908
原创 ASM字节码处理工具原理及实践(二)
上一篇讲了ASM的简介、导入,以及字节码文件结构,并给出了ASM通过ClassVisitor对class进行访问的基础实战。本篇将进入MethodVisitor,尝试对方法进行访问、生成、转换。方法的代码存储为字节码指令序列。在此之前,我们需要先复习JVM栈结构,才能更好地理解方法中字节码指令的逻辑。
2023-04-14 22:30:49
892
1
原创 ASM字节码处理工具原理及实践(一)
我们知道程序的分析。生成和转换是很有用的技术,可以用于很多场景。ASM作为一个Java字节码处理工具,它被设计用于处理已编译的Java类。ASM不是生成和转变已编译的Java类的唯一工具,但它是最新且最有效的工具之一。特点是体积小,速度快,开源。它的作用和JVM的动态性相辅相成,在许多场景下有很好的表现,例如相比于AOP的编译期织入,ASM的操作速度更快。
2023-04-13 23:47:57
1343
原创 Android 埋点实战(一) —— 装饰增强方式
静态代理明显优于动态代理,静态代理在编译器织入代码,或者修改代码,对运行时的程序不会带来太大的性能影响,而动态代理在程序运行阶段发生,可能需要反射,对程序性能有一定的影响。
2023-03-18 16:58:50
1085
原创 Java数据结构 - LinkedHashMap 与 LruCache
其原理就是 LruCache 类内维护了一个 LinkedHashMap,同时记录了 size 和 maxSize,这个 size 用于记录当前map内元素的总大小,maxSize 表示map内元素能够放的最大空间。这个钩子函数默认是空实现,而LinkedHashMap如果想要改为LRU,就需要在超出容量的时候,将最近最少使用的从集合中去除。在迭代器中的遍历访问,默认不会影响节点访问情况。如果添加的key-value将原有的值覆盖了,由于新旧Value的大小不一定是相同的,所以需要计算更新大小。
2023-03-16 21:09:07
704
原创 Android源码分析 - onSaveInstanceState、onRestoreInstanceState 状态保存与恢复
本文基于 Android8.0 源码。
2023-03-14 21:21:01
1099
1
原创 Android源码分析 - View的触摸事件分发
从Input系统发来触摸事件,到触摸事件的分发,中间涉及到 TouchTarget 树路径记录,简化后续 move、up 等事件的搜索时间
2023-03-11 12:17:14
637
原创 Android源码分析 - Parcel 与 Parcelable
Parcelable将Java对象序列化到内存中,其他进程可以通过内核访问到Parcelable序列化后的Java对象的数据,和Serializable不同的是,Parcelable不需要通过内核去进行IO、反射来反序列化,而是直接将序列化的数据写入到内存中。
2023-03-10 16:20:43
1059
原创 Retrofit中的反射耗时,罪魁祸首并不在动态代理,而在反射注解
简而言之,Retrofit的代理类的方法不是直接发起请求,而是通过解析方法上的注解和传入参数,生成一个可以用于请求的对象。Retrofit的这个ServiceMethod对象,它是一个请求的模板对象,下次再调用这个ServiceMethod代理的方法的时候,直接从缓存中(复用池中)复用这个ServiceMethod对象,减免每次都一样的解析注解的步骤。
2023-03-09 22:42:21
720
原创 Android特别的数据结构(二)ArrayMap源码解析
ArrayMap源码解析,分析其数据结构,及增删改查的实现。分析时间复杂度、与SparseArray、HashMap进行性能对比,包括时间复杂度对比、内存占用对比。
2023-03-08 16:06:19
1464
原创 Android特别的数据结构(一) SparseArray源码解析
SparseArray源码解析,分析其数据结构,及增删改查的实现。分析时间复杂度、与HashMap、TreeMap进行性能对比,包括时间复杂度对比、内存占用对比
2023-03-08 12:11:55
946
原创 Android源码分析 - InputManagerService与触摸事件
我们这里以触摸事件为例,梳理流程- 点击屏幕- InputManagerService的InputReader线程通过EventHub捕获输入事件- 经过处理后将消息发给InputDispatcher线程- InputDispatcher找到触摸的目标窗口,通过InputChannel的 socket将事件发送给客户端的主线程Looper- 主线程Looper通过socket的fd,找到对应的窗口,将事件交给这个window- 具体window下的View处理具体的事件。
2023-03-01 22:32:40
1199
原创 单核CPU是否有线程可见性问题?
因为这里根本就不存在同一级别的缓存出现不一致的情况,因为它最终层级只有一个缓存。至此,就搞通了为什么单核CPU下的多线程场景,不会造成线程安全,不会有线程可见性问题。
2023-02-27 23:03:26
995
原创 Android从屏幕刷新到View的绘制(三)之Handler异步消息与同步屏障
Android从屏幕刷新到View的绘制(三)之Handler异步消息与同步屏障
2023-02-27 13:46:13
721
原创 Android从屏幕刷新到View的绘制(二)之Choreographer、Vsync与屏幕刷新
Android从屏幕刷新到View的绘制(二)之Choreographer与Vsync与屏幕刷新
2023-02-26 18:47:19
1395
3
原创 Android从屏幕刷新到View的绘制(一)之 Window、WindowManager和WindowManagerService之间的关系
Android从屏幕刷新到View的绘制(一)之 Window、WindowManager。WindowManagerService之间的关系
2023-02-26 15:08:31
1440
原创 Android源码分析 —— Activity栈管理(基于Android8)
在Activity启动流程学习的基础上,拓展分析AMS对Activity栈管理的细节,根据activity的不同启动模式和启动标识符flag,来决定Activity的栈管理策略。
2023-02-24 23:26:19
10431
原创 Android源码分析 - 回顾Activity启动流程
从zygote跟踪到activity的onResume(),探究activity到底是怎么启动的。基于Android8.0。Android9.0大同小异,但Android10之后,activity的管理将转移到atms。
2023-02-23 21:24:54
597
原创 Android框架源码分析-浅析OkHttp3
Android源码分析之 OkHttp3,分析了同步异步发起请求的方式,以及代码设计的可参考性,流程图描述了拦截器的责任链模式,明确了 chain 和 interceptor 各自的任务合作用,并分析了连接池管理、socket请求部分的源码,对 100-continue, 101-switching-protocal,204-205-no-content 等进行了介绍
2023-02-16 19:22:48
789
原创 FyListen2 —— 相比 FyListen 更全面的生命周期监听器,告别内存泄漏
FyListen2生命周期监听框架,观察者模式,解决内存泄漏,线程安全,与 RxJava 的实战实例,补充分享重名方法无法重载的解决办法(内部类)凡是有生命周期的对象,你都能使用 FyListen 进行监听
2023-02-12 18:39:52
212
原创 FyListen——生命周期监听器(设计原理之理解生命周期)
FyListen框架原理:Activity 与 Fragment 的生命周期,及其生命周期事件分发原理。Fragment 通过状态转移实现生命周期回调
2023-02-11 18:16:50
724
原创 FyListen——生命周期监听器,告别内存泄漏!(上:使用方法)
使用 FyListen 生命周期监听框架,优雅地处理内存泄漏。监听 Activity、Fragment,兼容 Android、Androidx。
2023-02-11 18:08:34
645
原创 Android框架源码分析——从设计模式角度看 Retrofit 核心源码
从设计模式角度进行Retrofit源码解析,了解外观模式、构造者模式、策略模式、动态代理的基本使用,回答了CallAdapter和Convert使用的时机、注解和参数的解析处理、和OkHttp相比的优势、接口如何匹配对应的CallAdapterFactory(通过返回值类型)、等问题
2023-02-09 19:30:26
821
原创 Android框架源码分析——从设计模式角度看 RxJava 核心源码
从设计模式角度看RxJava核心源码。分析其订阅流程、事件回调流程,发布者装饰流、订阅者装饰流、并分析线程切换原理、解决内存泄漏问题。
2023-02-01 00:08:57
463
原创 Java多线程(二)——ReentrantLock源码解析(补充4——条件变量Condition)
ReentrantLock源码解析,条件变量 Condition 的使用,以及 Condition 的 await() ,signal() ,signalAll()源码解析
2023-01-27 22:25:15
691
原创 Java多线程(四)——ThreadPoolExecutor源码解析
ThreadPoolExecutor源码解析,分析线程池任务提交流程,分析其构造函数、核心参数、execute()、addWorker()、runWorker()、getTask()、tryTerminated()、shutdown()、shutdownNow()等方法
2023-01-25 14:05:52
1161
原创 Java多线程(二)——ReentrantLock源码解析(补充3——tryLock(long,TimeUnit) 锁超时)
ReentrantLock的tryLock(long, TimeUnit):如果在限定时间内没有获取到锁,将会放弃锁资源的等待。同时在限定时间内也可以响应中断。
2023-01-23 15:26:57
1969
原创 Java多线程(二)——ReentrantLock源码解析(补充2——可打断的锁)
ReentrantLock上锁的可打断(可中断)模式, lock.lockInterruptibly() 实现原理,分析与不响应中断的 lock.lock() 的区别。
2023-01-23 14:42:34
1425
原创 Java多线程(二)——ReentrantLock源码解析(补充1——从AQS中唤醒的线程)
补充分析 AQS 中阻塞的线程被唤醒后的执行流程,与竞争分析
2023-01-23 13:28:28
1406
原创 Java-线程基础
Java线程的六种状态,操作系统线程的五种状态,Java Thread类的常用方法详解:sleep(),yield(), join(), interrupt(), interrupted(), isInterrupted()
2023-01-22 11:55:14
1739
原创 Java多线程(二)—— ReentrantLock 源码分析
ReentrantLock 是可重入的互斥锁,虽然具有与 Synchronized 相同的功能,但比 Synchronized 更加灵活。ReentrantLock 底层基于 AQS(AbstractQueuedSynchronizer)实现。
2023-01-20 21:26:07
1575
1
原创 Android从开机到APP启动流程——基于Android9.0
Android Zygote启动流程,SystemServer启动流程,AMS启动流程,Launcher启动流程,APP启动流程
2023-01-17 23:09:09
2116
原创 Java多线程(一)——深入理解Synchronized与锁升级
Synchronized的使用及原理,锁升级,偏向锁,轻量级锁,重量级锁。Monitor,对象头等知识
2023-01-09 23:31:40
1115
3
原创 Android消息机制与源码剖析(Looper,Message,MessageQueue以及Handler)
Android消息机制源码剖析,以及常见问题等的回答:为何主线程的Looper死循环,但UI并不会卡死。
2022-12-13 15:29:23
368
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人