Android开发大厂面试必问Framework知识点解析
一、深入解析 Binder
1.Binder开篇
- 概述
- Binder
- IPC 原理
- Binder 原理
- C/S 模式
- 提纲
- 源码目录
- Java framework
- Native framework
- Kernel
2.Binder Driver 初探
- Binder驱动概述
- 概述
- 系统调用
- Binder核心方法
- binder_init
- binder_open
- binder_mmap
- binder_ioctl
- Command 使用场景
- 小节
- 附录
- 结构体列表
- binder_proc
- binder_thread
- binder_node
- binder_ref
- binder_ref_death
- binder_write_read
- binder_transaction_data
- flat_binder_object
- binder_buffer
- binder_transaction
- binder_work
- binder_state
3.Binder Driver 再探
- Binder通信简述
- Binder通信协议
- 通信模型
- binder_thread_write
- binder_thread_read
- 场景总结
- BC 协议使用场景
- BR 协议使用场景
- 协议转换图
- 数据转换图
- Binder内存机制
4.Binder 启动 ServiceManager
- 概述
- 流程图
- 启动过程
- main
- binder_open
- binder_become_context_manager
- binder_loop
- binder_parse
- svcmgr_handler
- 核心工作
- do_find_service
- do_add_service
- binder_link_to_death
- binder_send_reply
- 总结
5.获取 ServiceManager
- 概述
- 流程图
- defaultServiceManager
- 获取 ProcessState 对象
- ProcessState::self
- 初始化 ProcessState
- open_driver
- 获取 BpBinder 对象
- getContextObject
- getStrongProxyForHandle
- lookupHandleLocked
- 创建 BpBinder
- 获取 BpServiceManager
- interface_cast
- IServiceManager::asInterface
- DECLARE_META_INTERFACE
- IMPLEMENT_META_INTERFACE
- BpServiceManager 实例化
- 总结
- 模板函数
6.注册服务(addService)
- 概述
- media 服务注册
- 类图
- 时序图
- ProcessState
- ProcessState::self
- ProcessState 初始化
- open_driver
- mmap
- 服务注册
- instantiate
- BpSM.addService
- BpBinder::transact
- IPC::transact
- IPC.writeTransactionData
- IPC.waitForResponse
- IPC.talkWithDriver
- Binder Driver
- binder_ioctl_write_read
- binder_thread_write
- binder_transaction
- ServiceManager
- binder_parse
- svcmgr_handler
- do_add_service
- binder_send_reply
- 总结
7.获取服务(getService)
- 获取服务
- 类图
- 获取Media服务
- getMediaPlayerService
- BpSM.getService
- BpSM.checkService
- BpBinder::transact
- IPC::transact
- IPC.writeTransactionData
- IPC.waitForResponse
- IPC.talkWithDriver
- readStrongBinder
- 总结
8.framework 层分析
- 概述
- Binder 架构
- Binder 类图
- Binder 类分层
- 初始化
- startReg
- register_android_os_Binder
- 注册 Binder
- 注册 BinderInternal
- 注册 BinderProxy
- 注册服务
- SM.addService
- getIServiceManager
- SMN.asInterface
- SMP.addService
- writeStrongBinder(Java)
- writeStrongBinder(C++)
- BinderProxy.transact
- android_os_BinderProxy_transact
- 小结
- 获取服务
- SM.getService
- SMP.getService
- BinderProxy.transact
- android_os_BinderProxy_transact
- BpBinder.transact
- IPC.transact
- IPC.waitForResponse
- readStrongBinder
- 小结
- 实例
- Binder
- BinderProxy
9.如何使用 Binder
- Native 层 Binder
- 服务端
- 客户端
- 创建MyService
- 原理图
- 运行
- Framework 层 Binder
- Server 端
- Client 端
- 原理图
- 运行
10.如何使用 AIDL
- AIDL
- Server 端
- Client 端
- AIDL 文件
- Parcel 数据
- 运行
- 原理分析
- 源码
11.Binder 总结
- Binder概述
- Binder架构
- Binder进程与线程
- Binder传输过程
- Binder路由
12.Binder 面试题全解析
- Binder 有什么优势
- Binder 是如何做到一次拷贝的
- MMAP 的内存映射原理了解吗
- Binder 机制是如何跨进程的
- 说说四大组件的通信机制
- 为什么 Intent 不能传递大数据
二、深入解析 Handler 消息机制
1.宏观理论分析与 Message 源码分析
- 预热
- 设计 Handler 的初衷
- Java 多线程通信
- Android 多线程的特殊性
- Android 多线程通信
- 小结
- Handler 提供的一些方法
- 发送消息类方法
- 处理消息类方法
- 切换线程类方法
- 使用Handler
- 小结
- Handler 实现原理 - 理论分析
- 线程中接收消息端的特殊性
- Looper - 线程独立
- MessageQueue - 多线程同时发消息
- 小结
- Message 源码分析
- Message 中的数据属性与方法
- 创建与回收 Message 对象的基本方法
- 扩展方法
- 小结
2.MessageQueue 的源码分析
- 消息队列存储原理
- 使用 JNI 实现的 native 方法
- 创建与销毁
- 消息入队管理 enqueueMessage()方法
- 同步消息拦截器
- 队列空闲处理器 IdleHandler
- 消息出队管理 next()方法
- 总结
3.Looper 的源码分析
- 创建与退出 Looper
- 运行 Looper 处理消息
- 总结
4.handler 的源码分析
- 初始化
- 发送消息
- 接受消息
- 内存泄漏的可能
5.Handler 机制实现原理总结
- Message 缓存池
- 真正的阻塞发生在 MessageQueue
- 为什么推荐使用 Handler 实现线程间通信
6.Handler 面试题全解析
- 一个线程有几个 Looper?几个Handler?
- Handler 内存泄漏原因? 以及最佳解决方案?
- 为何主线程可以 new Handler?如果想要在子线程中 new Handler 要做些什么 准备?
- 子线程中维护的 Looper,消息队列无消息的时候的处理方案是什么?有什么 用?
- 既然可以存在多个 Handler 往 MessageQueue 中添加数据(发消息时各个 Handler 可能处于不同线程),那它内部是如何确保线程安全的?
- 我们使用 Message 时应该如何创建它?
- Looper 死循环为什么不会导致应用卡死?
三、Dalvik VM 进程系统
1.Android 系统启动综述
- 概述
- init
- Init.main
- Zygote 自动重启机制
- Zygote
- App_main.main
- AndroidRuntime::start
- ZygoteInit.main
- ZygoteInit.preload
- ZygoteInit.startSystemServer
- ZygoteInit.runSelectLoop
- system_server
- handleSystemServerProcess
- RuntimeInit.zygoteInit
- ZygoteInit.main
- SystemServer.main
- SystemServer.run
- 服务启动
- AMS.systemReady
- app
- ActivityThread.main
- 调用栈对比
- 启动日志分析
- before zygote 日志
- zygote 日志
- system_server 日志
- . logcat 小技巧
- 总结
- 进程 main 方法
- 重启相关进程
2.Init 篇
- 概述
- main
- log系统
- console_init_action
- restart_processes
- 信号处理
- signal_handler_init
- reap_any_outstanding_children
- register_epoll_handler
- rc文件语法
- Action
- Service
- Command
- Options
- 启动服务
- 启动顺序
- 服务启动(Zygote)
- 服务重启
- 属***
- property_init
- start_property_service
- handle_property_set_fd
- handle_property_set
- 总结
3.zygote 篇
- 概述
- Zygote 启动过程
- App_main.main
- start
- startReg
- 进入 Java 层
- ZygoteInit.main
- registerZygoteSocket
- preload
- startSystemServer
- runSelectLoop
- runOnce
- 总结
4.SystemServer 上篇
- 启动流程
- startSystemServer
- forkSystemServer
- nativeForkSystemServer
- ForkAndSpecializeCommon
- handleSystemServerProcess
- performSystemServerDexOpt
- zygoteInit
- commonInit
- nativeZygoteInit
- applicationInit
- invokeStaticMain
- MethodAndArgsCaller
5.SystemServer 下篇
- SystemServer 启动
- SystemServer.main
- SystemServer.run
- createSystemContext
- startBootstrapServices
- startCoreServices
- startOtherServices
- 服务启动阶段
- Phase0
- Phase100
- Phase480
- Phase500
- Phase550
- Phase600
- Phase1000
- 服务类别
四、深入解析 WMS
1.WMS概述
- 窗口管理
- 窗口动画
- 输入系统的中转站
- Surface管理
2.WMS的诞生
五、PackageMS 启动
1.PackageMS 相关框架类
2.PackageMS 启动过程