自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

深海流浪汉

如果思念有声,深夜震耳欲聋

  • 博客(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

原创 Excel2Table框架搭建 - Excel文件与数据库相互转换的工具

一款 Excel文件与数据库相互转换的工具,初期实现记录。

2023-03-12 22:24:11 683

原创 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

原创 高效获知Activity的生命周期

使用 Instrumentation 对 Activity 生命周期进行监听。

2023-02-20 15:58:31 613

原创 FyListen 在 MVP 架构中的内存优化表现

分享一下个人开源框架:FyListen生命周期监听框架 内存优化表现分析的实验过程

2023-02-18 17:07:28 356

原创 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

原创 Java-注解基础

注解基础, 自定义注解

2022-11-24 15:49:42 389

原创 Java-泛型基础

泛型基础,通配符与泛型方法,泛型擦除,桥方法

2022-11-23 23:26:35 237

原创 Java-反射基础

Java反射基础,各种反射方法的基础认识

2022-11-23 15:42:45 395

空空如也

空空如也

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

TA关注的人

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