Android Framework
启动流程
init 进程启动过程
Android系统启动流程
Zygote启动流程及源码分析
APP启动流程
init进程是Android用户空间第一个进程,主要做以下3件事情:
- 创建和挂载启动所需的文件目录。
- 初始化和启动关键服务,守护关键服务。
- 解析init.rc配置文件,并启动Zygote进程。
- 简述Android系统启动流程?
- 按电源键开机,从ROM加载预制程序启动BootLoader。
- Bootloader启动Linux内存Kernel,并启动第一个用户空间进程init。
- init进程创建挂载文件目录,加载属性服务,解析init.rc文件启动Zygote进程。
- Zygote进程,启动虚拟机,注册JNI服务,预加载系统资源(系统类,字体、资源文件、SO库、Chromium动态库)。创建Socket服务,fork出system_server进程,
- system_server进程启动AMS、WMS、PMS等系统服务。
- Zygote进入轮询监听AMS启动应用请求。
- AMS启动Launcher。
- system_server 为什么要在 Zygote 中启动,而不是由 init 直接启动呢?
- Zygote 作为孵化器,可以提前加载一些资源,当fork出子进程,子进程就会拥有这些进程。
- system_server进程需要JNI函数、共享库、常用类、以及主题资源资源,在init进程中是没有的。
- 为什么要专门使用 Zygote 进程去孵化应用进程,而不是让 system_server 去孵化呢?
- system_server进程包含AMS、WMS等系统服务,在应用进程中是不需要的。
- fork操作仅会把调用线程拷贝到子进程,可能会导致死锁。
- 描述下是怎么导致死锁的?
- fork操作复制整个用户空间(copy-on-write策略)以及所有系统对象,然后只复制当前线程到子线程,其他线程蒸发掉了。
- 当某个线程获取了某个锁,锁会被复制进子进程,在子进程看,锁没有所有者没法解锁,程序发生死锁。
- Zygote 为什么不采用 Binder 机制进行 IPC 通信?
- 先后时序问题,binder需要注册到ServiceManager,Zygote使用binder不能保证创建binder时ServiceManager初始化完成。
- binder支持多线程操作,可能出现死锁。
- binder拷贝问题,binder是成对存在的,分为Client端和服务端,fork出应用进程,不能释放无用binder对象,占用内存。
- LocalSocket效率也很高,而且有权限验证能保证进程通信安全。
- Socket fork后,应用进程可以关闭。
Android AMS(ATMS)
Android AMS的理解
Android 的AMS是什么
ASM启动
Android AMS源码解析
Android WMS
Activity创建到View的显示过程
Android PMS
PMS(PackageManagerService) 原理
PMS处理APK的复制
事件机制
ViewRootImpl篇
Android事件分发机制
显示框架
Choreographer 详细分析
Android屏幕刷新机制
Android View 的绘制流程
Android显示框架
Android Activity/View/Window/Dialog/Fragment 深层次关联
Binder
Binder机制
为什么使用socket而不使用binder
Handler机制
Android之Handler源码分析
android handler postDelay源码解析
Android消息机制(5)MessageQueue深入解析
ANR触发机制
Android的ANR原理分析
ANR 触发原理与分析
主线程中的Looper.loop()一直无限循环为什么不会造成ANR
主线程的Looper为什么不会导致应用的ANR
管道+epoll
Handle
浅谈Android之Linux pipe/epoll
Android 消息处理以及epoll机制
epoll Android,Android_INotify与Epoll
Linux事件管理机制-epoll
共享内存
fresco mmkv
Android 内存映射mmap浅谈
Android mmap文件读写
mmap原理与解析
MMKV-Android中的存储框架
MMKV组件原理
信号量
matrix xcrash 友盟apm
跨进程通信
爱奇艺Andromeda 跨进程通信组件分析
饿了么 HermesEventBus
JVM
JVM介绍
JVM指令手册
JVM 运行时数据区
Java类的生命周期
浅谈一个Java类的生命周期
Java对象创建过程
JAVA对象的创建过程
Java对象内存布局
Java 对象内存布局详解
Java性能优化之JVM GC
Java垃圾回收(GC)机制
浅析Java虚拟机的垃圾回收机制(GC)
Dalvik & ART
Android 虚拟机 (Dalvik & ART)
android虚拟机与hotspot虚拟机的区别
Android 类加载器
Android插件化框架系列之类加载器
Android插件化框架系列之类加载器
Android 并发编程
Android 并发编程
Android ASM
Android ASM
javassist使用指南
Android Gradle 中的使用ASMified插件生成.class的技巧
AGP 7.x ASM 字节码插桩
自定义 Gradle Transform
Transform 创建自定义插件
Android IOC
IOC框架的实现原理
Android APT
APT技术学习
Android注解
IO
SharedPreference使用及原理分析
SharePreference使用以及原理简析
Sharepreference槽点及改进方案
Java NIO全面详解
mmap内存映射
DMA之理解
Android 内存映射mmap浅谈
Linux 基础I/O
插件化
Android 类加载器
插件化框架 Shadow
Shadow原理分析
RePlugin流程与源码解析
组件化
ARouter的原理
Arouter原理分析
Arouter的原理是什么?
- 通过注解标记Activity。
- 通过反射,找到注解标记的类名和包名,并保存。
- 通过APT技术,根据保存的类名和包名,生成对应的Java代码,这段Java代码的功能就是把activity.class存入路由表,也就是HashMap。
- 不同业务module需要跳转到对应的Activity时,直接从HashMap中取出对应的activity.class,就可以实现跳转。
图片加载
设计模式
三级缓存
网络库
数据存储
SharePrefrences
MMKV 原理解析
代码检查
Android自定义Lint的二三事儿
APM
BlockCancary
xCrash
Logan
Mars
内存优化
Android性能优化-内存优化
网络优化
Android性能优化-网络优化
卡顿优化
Android性能优化-卡顿优化
电量优化
Android性能优化-电量优化
Android性能优化-包大小优化
Android性能优化-包大小优化
设计模式
Android 设计模式
其他
Android中高级面试必知必会
Android中MotionEvent的来源和ViewRootImpl
AsyncTask,ThreadPoolExcutor,Service之间的关系与区别
Parcelable和Serializable浅析
深入理解Android ClassLoader
四大组件通信核心
系统启动到App 界面完全展示
WebView加载Chromium动态库的过程分析