Android 高级进阶知识整理

Android Framework

启动流程

init 进程启动过程

Android系统启动流程

Zygote启动流程及源码分析

APP启动流程

init进程是Android用户空间第一个进程,主要做以下3件事情:

  • 创建和挂载启动所需的文件目录。
  • 初始化和启动关键服务,守护关键服务。
  • 解析init.rc配置文件,并启动Zygote进程。
  1. 简述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。
  1. system_server 为什么要在 Zygote 中启动,而不是由 init 直接启动呢?
  • Zygote 作为孵化器,可以提前加载一些资源,当fork出子进程,子进程就会拥有这些进程。
  • system_server进程需要JNI函数、共享库、常用类、以及主题资源资源,在init进程中是没有的。
  1. 为什么要专门使用 Zygote 进程去孵化应用进程,而不是让 system_server 去孵化呢?
  • system_server进程包含AMS、WMS等系统服务,在应用进程中是不需要的。
  • fork操作仅会把调用线程拷贝到子进程,可能会导致死锁。
  1. 描述下是怎么导致死锁的?
  • fork操作复制整个用户空间(copy-on-write策略)以及所有系统对象,然后只复制当前线程到子线程,其他线程蒸发掉了。
  • 当某个线程获取了某个锁,锁会被复制进子进程,在子进程看,锁没有所有者没法解锁,程序发生死锁。
  1. 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动态库的过程分析

你可能感兴趣的:(Android,android)