Android源码分析
文章平均质量分 93
Android源码分析
Elson_6
Talk is cheap, show me the code.
展开
-
源码分析 — Sytem.loadLibrary 解析
在我们实际开发中,经常会调用so库的一些功能,那么他们是如何工作的呢?本文我们就来分析一下 so库的加载原理。原创 2023-03-24 14:55:19 · 3059 阅读 · 1 评论 -
渲染机制(二):Choreographer 源码解析
在引入 Vsync 之前,系统渲染一帧是通过Message来实现的,Msg中间没有间隔。但由于Msg的消费时长不确定,这直接导致了帧率不稳定,从而产生了Jank现象,画面撕裂等问题。为了优化这些问题,Android 在4.1之后引入了 `Choreographer + SurfaceFlinger + Vsync + TripleBuffer` 这一套机制,保证了 Android App 可以以一个稳定的帧率运行(60fps),减少帧率波动带来的不适感。原创 2023-03-14 22:15:39 · 1588 阅读 · 0 评论 -
渲染机制(四):硬件加速
硬件加速的主要原理是通过将CPU不擅长的图形计算转换成GPU专用指令,让更擅长图形计算的GPU来完成渲染,从而提升了整体的渲染速度。原创 2023-03-16 22:25:07 · 956 阅读 · 0 评论 -
渲染机制(一):Android渲染机制的演进
在Android中,当我们谈到布局优化、卡顿优化时,通常通过减少布局层级、减少主线程耗时操作来减少丢帧。如果丢帧比较严重,那么界面可能会有明显的卡顿感。本文我们来探究下Android的渲染机制。原创 2023-03-13 19:16:01 · 1340 阅读 · 0 评论 -
渲染机制(三):Vsync信号
本文主要介绍了 VSync 相关的内容。原创 2023-03-13 19:08:33 · 654 阅读 · 0 评论 -
RecyclerView(二) — 缓存机制分析
本文主要介绍了 RecyclerView 缓存机制实现原理。原创 2022-10-26 21:25:54 · 2399 阅读 · 0 评论 -
RecyclerView(一) — 绘制流程分析
RecyclerView继承自ViewGroup,其最根本的功能是添加子View。当子View过多时,超出屏幕部分的子 View 就显示不出来,这时引入滑动机制来解决问题。当子 View 数量很多时,又会产生另一个新问题 (内存占用大)。这种场景有个特点,即屏幕展示的子 View 有限,大部分子 View 都不可见。所以新增View的复用机制,通过回收并复用不可见的View 来实现优化。这便是 ListView、RecyclerView存在的价值。本文主要分析RecyclerView的实现方案。原创 2022-10-26 16:27:49 · 1310 阅读 · 0 评论 -
ClassLoader (一) — Android 中的 ClassLoader 体系
Android 中, DVM 或 ART虚拟机加载的是 Dex 文件,因此 Androd 中自定义了部分 ClassLoader 来实现类的加载。Android 中的 ClassLoader 类型分为两种:1. 系统类加载器。系统类加载器主要包括 3 种,分别是BootClassLoader 、 PathClassLoader 和 DexClassLoader。2. 自定义加载器。原创 2020-05-08 18:45:15 · 650 阅读 · 0 评论 -
ClassLoader (二) — 浅析 PathClassLoader 和 DexClassLoader 的区别
浅析 PathClassLoader 和 DexClassLoader 的区别一、概述二、 PathClassLoader 和 DexClassLoader 构造方法的区别三、optimizedDirectory 参数的使用1. DexPathList 中的流程2. DexFile 中的流程3. Native 层的流程4. 流程图四、Android 8.0 的版本五、参考一、概述在 Andr...原创 2020-05-08 18:45:37 · 1681 阅读 · 0 评论 -
Window系列 (二) — WindowManagerService 浅析
WindowManagerService 详解一、概述二、一、概述二、原创 2020-04-26 21:45:02 · 671 阅读 · 0 评论 -
Window系列 (三) — Activity、Window、DecorView 的关系
Activity、Window、DecorView 的关系一、概述一、概述原创 2020-04-26 15:27:55 · 2530 阅读 · 0 评论 -
Window系列 (四) — Touch 事件是如何传递到 Activity ?
Touch 事件是如何传递到 Activity ?一、概述一、概述原创 2020-04-26 11:59:12 · 950 阅读 · 0 评论 -
Window系列 (一) — WindowManager 详解
WindowManager 详解一、概述二、WindowManager 体系1. 类图2. 源码分析2.1 `ViewManager` 的结构2.2 PhoneWindow 对象何时创建?2.3 WindowManagerImpl 类三、Window 的属性 (类型和显示次序)四、Window 的操作1. Window 的添加过程2. Window 的更新过程3. Window 的删除过程4. I...原创 2020-04-26 11:58:24 · 6144 阅读 · 0 评论 -
源码分析 — Context 详解
记录一些知识点:Context的使用 Context作用域 Application Activity Service Show a Dialog No Yes No Start a Activity 不推荐 Yes 不推荐 Layout Inflation 不推荐 Yes 不推荐 Start a Service Yes Yes原创 2016-08-13 12:26:54 · 477 阅读 · 0 评论 -
View系列 (五) — Draw 流程详解
Draw 流程详解一、概述二、单一 View 的 Draw 过程1. 流程图2. 源码分析三、ViewGroup 的 Draw 过程1. 流程图2. 源码分析一、概述在执行完 measure 流程、layout 流程后,如果我们要将 View 展示在界面上,需要执行 draw 流程 。与 measure 流程、layout 流程 类似, draw 流程 也分为以下两种场景。View...原创 2020-04-26 11:58:02 · 821 阅读 · 0 评论 -
View系列 (四) — Layout 流程详解
Layout 流程详解一、概述二、单一 View 的 Layout 过程1. 流程图2. 源码分析3. 小结三、ViewGroup 的 Layout 过程1. 流程图2. 源码分析四、Layout 过程跟 Measure 的一个区别1. 以 LinearLayout 为例,Measure 流程对应代码2. 以 LinearLayout 为例,Layout 流程对应代码一、概述在 View 的 ...原创 2020-04-26 11:57:50 · 929 阅读 · 1 评论 -
View系列 (三) — Measure 流程详解
Measure 流程详解一、概述二、单一 View 的测量流程1. 流程图2. 源码分析三、ViewGroup 的测量流程1. 流程图2. 源码分析一、概述测量过程分为 View的measure过程 和 ViewGroup的measure过程。View的类型measure 过程单一的View (如 ImageView)只测量自身ViewGroup遍历测量该 Vi...原创 2020-04-26 11:57:27 · 655 阅读 · 0 评论 -
View系列 (二) — MeasureSpec 详解
MeasureSpec 详解一、概述二、MeasureSpec 的构成1. MeasureSpec 中的常量2. MeasureSpec 提供的方法三、MeasureSpec 的使用1. 根 View 大小的测量2. 非根 View 大小的测量一、概述在 View 的测绘 (measute()) 过程中,会用到 MeasureSpe (测量规格)。MeasureSpec的作用确切来说,M...原创 2020-04-26 11:57:02 · 687 阅读 · 0 评论 -
View系列 (一) — Android 坐标系
自定义View — Android 坐标系一、概述二、坐标系1. Android 坐标系2. View坐标系一、概述Android 中 View 分为两种类型,一种为内部可以包含其它子 View 的 ViewGroup 类型,另一种内部不可以再包含其它子 View 的 View 类型。一个页面上的元素大致如下图所示:类型控件View:TextView、Button...原创 2020-04-26 11:56:08 · 307 阅读 · 0 评论 -
Android事件分发机制
Android 事件分发机制是一块比较重要的知识,了解并熟悉整套事件分发机制有助于我们在开发过程中处理各种滑动冲突相关的问题,因此有必要掌握这部分内容。原创 2016-07-19 22:33:02 · 806 阅读 · 0 评论 -
源码分析 — VirtualAPK框架(二)之四大组件
一、概述1.1 相关技术点1.2 参考文章1.3 版本二、Activity2.1 原理2.2 代码分析三、BroadcastReceiver四、Service五、ContentProvider一、概述1.1 相关技术点设计模式 — 动态代理模式源码分析 — Activity的清单注册校验源码分析 — ActivityThread(...原创 2018-03-30 17:34:04 · 513 阅读 · 0 评论 -
源码分析 — Binder机制(一)(进程间通信)
一、概述二、流程图2.1 流程图说明三、类图3.1 Binder机制在 IActivityManager 中的应用3.2 Binder机制在 AIDL 中的应用3.2.1 AIDL文件所生成 class 文件的类的关系图3.2.1 分析AIDL文件生成的 class 文件的代码四、类 Binder、BinderProxy4.1 BinderProxy4.2 类...原创 2018-03-16 13:05:17 · 1084 阅读 · 0 评论 -
源码分析 — Binder机制(二)之IActivityManager
一、概述二、类图三、时序图四、源码分析4.1 类 Singleton4.2 类 ActivityManagerNative4.3 类 ActivityManagerProxy4.4 类 ActivityManagerService五、ActivityManagerService 与 ApplicationThread 的跨进程通信一、概述 阅读...原创 2018-03-22 13:55:04 · 1904 阅读 · 0 评论 -
源码分析 — Activity的启动流程
一、概述二、从启动应用到获取到 ActivityManagerProxy 的过程2.1 时序图2.2 源码分析2.3 小结三、从ActivityManagerProxy 到创建应用进程的过程3.1 时序图3.2 源码分析四、从应用进程创建完成之后到启动 Activity 的过程;4.1 时序图4.2 源码分析五、从 Activity 被启动到页面显示完成的过...原创 2018-03-21 15:07:27 · 1055 阅读 · 0 评论 -
源码分析 — ActivityThread(一)之main()的调用 (Android应用进程的孵化)
一、概述二、时序图三、Socket轮询器启动的源码分析3.1 类 ZygoteInit3.2 类 ZygoteConnection3.3 类 RuntimeInit3.4 类 MethodAndArgsCaller小结: Zygote响应请求的流程四、创建子过程(应用进程)的源码分析4.1 类 LauncherActivity4.2 类 ActivityManager...原创 2018-03-20 23:27:08 · 3797 阅读 · 0 评论 -
源码分析 — ActivityThread(二)之相关类的分析
一、概述二、ActivityThread.main() 方法2.1 执行 ActivityThread.attach() 操作2.2 在 main() 最后为何要抛出 RuntimeException 异常呢?又是在哪里被捕获呢?2.3 小结三、ActivityThread、ApplicationThread、H(Handler)之间的关系四、类 ApplicationThr...原创 2018-03-22 13:58:07 · 809 阅读 · 0 评论 -
源码分析 — LauncherActivity(Launcher界面)
一、概述二、源码分析2.1 类 ListActivity2.2 类 LauncherActivity三、小结一、概述 在Launcher界面,我们会点击应用图标来启动对应的应用,那它又是在哪个类实现的呢?分析: 一般手机的Launcher界面,界面的效果和我们平时所做的需求大同小异,无非就是Item展开显示;源码版本: Android 2...原创 2018-03-21 11:11:27 · 1119 阅读 · 0 评论 -
源码分析 — Activity的清单注册校验及动态注入
一、概述二、示例三、时序图四、源码分析五、实践:如何绕过校验,动态注入Activity?5.1 原理分析5.2 实践一、概述 一般情况下,Activity的启动都需要先在清单文件AndroidManifest.xml中注册后,才能使用。而目前流行的插件化则是通过在底座清单文件中提前占坑的方式来达到启动插件中Activity的目的。但是,插件中...原创 2018-03-14 22:47:53 · 1221 阅读 · 1 评论 -
源码分析 — PackageManagerService(一)之启动流程
一、概述二、PMS初始化时序图三、PMS源码PackageManagerService 构造方法内主要执行以下几件事:3.1 Settings类3.2 packages.xml 等文件的读取及解析3.3 Manifest 文件的解析3.4 将数据写入packages.xml中四、总结五、参考一、概述背景 本文主要分析PackageM...原创 2018-03-17 20:17:07 · 1178 阅读 · 0 评论 -
源码分析 — PackageManagerService(二)之resolveIntent()
一、概述二、resolveIntent()解析2.1 resolveIntent()解析时序图2.2 resolveIntent()源码三、小结一、概述背景 在源码分析 — Activity的清单注册校验及动态注入一文中,我们通过AppGlobals.getPackageManager() 方法获取了IPackageManager的接口实现...原创 2018-03-16 17:59:51 · 2450 阅读 · 1 评论 -
源码分析 — SystemServer
一、概述二、SystemServer启动时序图三、SystemServer启动的源码分析3.1 类 ZygoteInit3.2 类 RuntimeInit3.3 类MethodAndArgsCaller四、SystemServer源码分析一、概述在Android启动的时候,会涉及到很多系统级的服务启动,如ActivityManagerService(AM...原创 2018-03-17 14:58:55 · 854 阅读 · 0 评论 -
源码分析 — VirtualAPK框架(一)之初始化
一、概述1.1 相关技术点1.2 参考1.3 版本二、插件框架初始化2.1 时序图2.2 框架初始化的源码分析三、插件的加载3.1 加载插件的示例代码3.2 插件初始化源码分析一、概述 文章看过千百遍,不如源码走一遍。 一则,提升阅读源码的能力; 二则,在阅读源码的过程中学会思考,理解其实现原理; 如是,便有了此文。...原创 2018-03-14 16:12:20 · 486 阅读 · 0 评论 -
源码分析 — Handler机制(线程间通信)
最近整理以前的文章,上传到优快云。一、前言线程间通讯机制的内部实现原理,即Handler、Message、MessageQueue、Looper、HandlerThread、AsyncTask类的实现以及之间的关系。二、了解相关的几个类:Handler:负责发送Message和Runnable到MessageQueue中,然后依次处理MessageQueue队列里的...原创 2018-01-02 15:11:56 · 766 阅读 · 0 评论