通常作为一个Android APP开发者,我们并不关心Android的源代码实现,不过随着Android开发者越来越多,企业在筛选Android程序员时越来越看中一个程序员对于Android底层的理解和思考,这里的底层主要就是Android Framewok中各个组件的运行原理。

这里分享一份 《Android Framework 开发揭秘》,深入Android底层原理的探索。内容包括:系统启动流程分析、Binder 解析、Handler解析、AMS 解析、WMS解析、PKMS Android10.0 源码解读。

每一章节都会对一个Framework知识点进行详细解析,并且还包括相关面试题的详细解析。帮助大家在巩固Framework知识点的同时复习知识点的常用面试题。(资料文末免费领取~)

第一章 系统启动流程分析

  • 第一节 Android启动概览
  • 第二节 init.rc解析
  • 第三节 Zygote
  • 第四节 面试题

第二章 Binder 解析

  • 第一节 宏观认识 Binder
  • 第二节 binder 的 jni 方法注册
  • 第三节 binder驱动
  • 第四节 数据结构
  • 第五节 启动 service_manager
  • 第六节 获取 service_manager
  • 第七节 addService 流程
  • 第八节 Binder 面试题全解析

第三章 Handler解析

  • 第一节 源码分析
  • 第二节 难点问题
  • 第三节 Handler 常问面试题

第四章 AMS 解析

  • 第一节 引言
  • 第二节 Android架构
  • 第三节 通信方式
  • 第四节 系统启动系列
  • 第五节 AMS
  • 第六节 AMS 面试题解析

第五章 WMS解析

  • 第一节 Activity 与 Window 相关概念
  • 第二节 计算Activity窗口大小的过程分析
  • 第三节 对窗口的组织方式分析
  • 第四节 对输入法窗口的管理分析
    • 第五节 对壁纸窗口的管理分析
  • 第六节 计算窗口Z轴位置的过程分析
  • 第七节 显示Activity组件的启动窗口的过程分析
  • 第八节 切换Activity窗口的过程分析
  • 第九节 显示窗口动画的原理分析

第六章 PKMS Android10.0 源码解读

  • 第一节 前言 PKMS 是什么东西?
  • 第二节 PKMS 概述信息
  • 第三节 PKMS角色位置
  • 第四节 PKMS 启动过程分析
  • 第五节 APK的扫描
  • 第七节 PMS之权限扫描
  • 第八节 PackageManagerService大综合笔记

需要《Android Framework 开发揭秘》、 Android Framework面试题(含答案解析)资料的朋友,可以点击此处免费领取!

Framework相关面试题

系统启动

  • android系统启动流程
  • SystemServer,ServiceManager,SystemServiceManager的关系
  • 孵化应用进程这种事为什么不交给SystemServer来做,而专门设计一个Zygote
  • Zygote的IPC通信机制为什么使用socket而不采用binder

Binder

  • Android中进程和线程的关系,区别
  • 为何需要进行IPC,多进程通信可能会出现什么问题
  • Android中IPC方式有几种、各种方式优缺点
  • 为何新增Binder来作为主要的IPC方式
  • 什么是Binder
  • Binder的原理,Binder Driver 如何在内核空间中做到一次拷贝的?
  • 使用Binder进行数据传输的具体过程
  • Binder框架中ServiceManager的作用
  • 什么是AIDL
  • AIDL使用的步骤
  • AIDL支持哪些数据类型
  • AIDL的关键类,方法和工作流程
  • 如何优化多模块都使用AIDL的情况
  • 使用 Binder 传输数据的最大限制是多少,被占满后会导致什么问题
  • Binder 驱动加载过程中有哪些重要的步骤
  • 系统服务与bindService启动的服务的区别
  • Activity的bindService流程
  • 不通过AIDL,手动编码来实现Binder的通信

Handler

  • Handler的实现原理
  • 子线程中能不能直接new一个Handler,为什么主线程可以 主线程的Looper第一次调用loop方法,什么时候,哪个类
  • 3.Handler导致的内存泄露原因及其解决方案
  • 4.一个线程可以有几个Handler,几个Looper,几个MessageQueue对象
  • 5.Message对象创建的方式有哪些 & 区别?Message.obtain()怎么维护消息池的?
  • Handler 有哪些发送消息的方法
  • Handler的post与sendMessage的区别和应用场景
  • handler postDealy后消息队列有什么变化,假设先 postDelay 10s, 再postDelay 1s, 怎么处理这2条消息
  • MessageQueue是什么数据结构
  • Handler怎么做到的一个线程对应一个Looper,如何保证只有一个MessageQueue,ThreadLocal 在 Handler机制中的作用
  • HandlerThread是什么 & 好处 &原理 & 使用场景
  • IdleHandler及其使用场景
  • 消息屏障,同步屏障机制
  • 子线程能不能更新UI
  • 为什么Android系统不建议子线程访问UI
  • Android中为什么主线程不会因为Looper.loop()里的死循环卡死,MessageQueue#next 在没有消息的时候会阻塞,如何恢复?
  • Handler消息机制中,一个looper是如何区分多个Handler的,当Activity有多个Handler的时候,怎么样区分当前消息由哪个Handler处理,处理message的时候怎么知道是去哪个callback处理的
  • Looper.quit/quitSafely的区别
  • 通过Handler如何实现线程的切换
  • Handler 如何与 Looper 关联的
  • Looper 如何与 Thread 关联的
  • Looper.loop()源码
  • MessageQueue的enqueueMessage()方法如何进行线程同步的
  • MessageQueue的next()方法内部原理
  • 子线程中是否可以用MainLooper去创建Handler,Looper和Handler是否一定处于一个线程
  • ANR和Handler的联系

WMS

  • 什么是WMS
  • WMS是如何管理Window的
  • IWindowSession是什么,WindowSession的创建过程是怎样的
  • WindowToken是什么
  • WindowState是什么
  • Android窗口大概分为几种?分组原理是什么
  • Dialog的Context只能是Activity的Context,不能是Application的Context
  • App应用程序如何与SurfaceFlinger通信的,View 的绘制是如何把数据传递给 SurfaceFlinger 的
  • 共享内存的具体实现是什么
  • relayout是如何向SurfaceFlinger申请Surface
  • 什么是Surface

AMS

  • ActivityManagerService是什么?什么时候初始化的?有什么作用?
  • ActivityThread是什么?ApplicationThread是什么?他们的区别
  • Instrumentation是什么?和ActivityThread是什么关系?
  • ActivityManagerService和zygote进程通信是如何实现的
  • ActivityRecord ProcessRecord
  • ActivityManager ,ActivityManagerProxy的关系
  • 手写实现简化版AMS

alt

文章篇幅有限,需要《Android Framework 开发揭秘》、 Android Framework面试题(含答案解析)资料的朋友,可以点击此处免费领取!