2022 | Android大厂面试必问之FrameWork——Binder、Handler、WMS、AMS核心原理解析!

胧月线程
• 阅读 324

2022 | Android大厂面试必问之FrameWork——Binder、Handler、WMS、AMS核心原理解析!

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

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

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

第一章 系统启动流程分析

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

2022 | Android大厂面试必问之FrameWork——Binder、Handler、WMS、AMS核心原理解析!

第二章 Binder 解析

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

2022 | Android大厂面试必问之FrameWork——Binder、Handler、WMS、AMS核心原理解析!

第三章 Handler解析

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

2022 | Android大厂面试必问之FrameWork——Binder、Handler、WMS、AMS核心原理解析!

第四章 AMS 解析

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

2022 | Android大厂面试必问之FrameWork——Binder、Handler、WMS、AMS核心原理解析!

第五章 WMS解析

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

2022 | Android大厂面试必问之FrameWork——Binder、Handler、WMS、AMS核心原理解析!

第六章 PKMS Android10.0 源码解读

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

2022 | Android大厂面试必问之FrameWork——Binder、Handler、WMS、AMS核心原理解析!

需要《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的通信

2022 | Android大厂面试必问之FrameWork——Binder、Handler、WMS、AMS核心原理解析!

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的联系

2022 | Android大厂面试必问之FrameWork——Binder、Handler、WMS、AMS核心原理解析!

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

2022 | Android大厂面试必问之FrameWork——Binder、Handler、WMS、AMS核心原理解析!

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

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
刘望舒 刘望舒
4年前
Android Binder原理(六)Java Binder的初始化
Binder原理Android框架层本文首发于微信公众号「刘望舒」<!more前言在这篇文章中,我根据Android系统的分层,将Binder机制分为了三层:1.JavaBinder(对应Framework层的Binder)2.NativeBinder(对应Native层的Binder)3.KernelBinder(对应Kernel层的Bi
梦
5年前
微信小程序new Date()转换时间异常问题
微信小程序苹果手机页面上显示时间异常,安卓机正常问题image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/b691e1230e2f15efbd81fe11ef734d4f.png)错误代码vardate'2021030617:00:00'vardateT
2021年春招Android面试题,详细解说
来,发车了!1.战略定位:Android面试都会问些什么?要打败敌人首先需要摸清敌人。Android面试有它固有的套路。一般大厂的面试包括技术面3HR面1。技术面中一面考察基础知识,这一面相对容易,只要你把我下面给出的武林秘籍背熟就易如反掌。这一面大约占40%;二面侧重项目经历/应对问题能力,这一面要求普遍较高,需要学会应用知识,更注重于优
Stella981 Stella981
4年前
Spinner使用
1.在xml文件设立布局文件<Spinner    android:layout\_width"wrap\_content"    android:layout\_height"wrap\_content"    android:layout\_below"@id/b1"    andro
Wesley13 Wesley13
4年前
Unity横屏
Android下发现Unity里面的Player设置,并不能完全有效,比如打开了自动旋转,启动的时候还是会横屏,修改XML添加以下代码<applicationandroid:icon"@drawable/ic\_launcher"                    android:label"@string/app\_name"
Python进阶者 Python进阶者
2年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这