前言
有必要去研究Handler和Binder么?
当然有不要啊,现在面试对Android开发者的要求越来越高了!尤其是阿里、头条、腾讯等大厂,面试问的很多都是原理。以前开始学习Android的时候,有时候想研究源码,研究一些Android底层原理,只能去翻书,或者向其他公司的大牛请教,一个疑问有时候会卡好几天。
那时候只要了解四大组件、视图、网络请求,你就能拿到一份薪资丰厚的offer;当时,如果你要是精通java基础,知道如何处理OOM,组件生命周期原理,熟悉android源码、架构体系,进阿里腾讯都是很轻松。
为什么Android面试必问Handler和Binder?
众所周知,程序代码是死的,系统运转是活的,各模块代码运行在不同的进程(线程)中,想要真正理解安卓的这几大服务,势必要掌握安卓的通信机制,而安卓最主要的两个通信机制就是Handler和Binder。
Binder机制在Android中的地位举足轻重,我们需要掌握的很多原理都和Binder有关:
- 系统中的各个进程是如何通信的?
- Android系统启动过程
- AMS、PMS的原理
- 四大组件的原理,比如Activity是如何启动的?
- 插件化原理
- 系统服务的Client端和Server端是如何通信的?(比如- MediaPlayer和MeidaPlayerService)
可以说Binder机制是掌握系统底层原理的基石。
Handler的地位也是同样的原理。
现在的业界有一句话是这样说的:技术好的未必弄得懂底层,但是底层基础好的学起技术来很快。所以,大公司在挑选公司人才的时候,更加看重的是应聘者对底层原理的掌握和理解。
所以,明白了吗?Handler和Binder面试官必问的×2。
大厂面试真题举例
来来来,看看这几道大厂关于Handler和Binder的面试真题,能不能答上来?(这都是我在网上找到的Handler和Binder面试必问的经典题目)
1、一个线程有几个Handler?
2、Handler 内存泄漏原因?为什么其他的内部类没有说过有这个问题?
3、为何主线程可以new Handler?如果想要在子线程中new Handler要做些什么准备?
4、子线程中维护的Looper,消息队列无消息的时候的处理方案是什么?有什么用?
5、既然可以存在多个Handler往MessageQueue中添加数据(发消息时各个Handler可能处于不同线程),那它内部是如何确保线程安全的?
6、我们使用Message时应该如何创建它?
7、Looper死循环为什么不会导致应用卡死?
8、Binder有什么优势?(字节跳动)
9、Binder是如何做到一次拷贝的?(腾讯)
10、MMAP的原理讲解;(腾讯)
11、为什么Intent不能传递大数据?(阿里)
12、描述AIDL生成的Java类细节;(字节跳动)
13、四大组件底层的通信机制;(字节跳动)
14、为什么Intent不能传递大数据?(阿里)
一线企业的app都是多线程和多进程的,而Android进程间通信机制就是Binder,原生的线程间通信则是Handler,Binder和Handler是了解安卓运行机制必须要掌握的一个知识点,更是一线企业面试必问的知识点!
上面这些问题,换你去你都答上来么?你现在还会觉得没有必要去研究Handler和Binder么?
知道要问,关键是该怎么答呢?
那些底层的东西,每次学完就忘,一合上书就忘得差不多了,不知道要怎样学才好了。
其实造成这样的现象最主要的原因是没有掌握系统的学习方法,也没有系统的资料辅助理解和学习。
知识点就是那些,基本上,翻来覆去就是那些换汤不换药的问法。我通过对最近两年这些大厂面经的收集和分析,把那些经常问到的Handler和Binder以及相关的知识点整理了出来,成为一份专门针对这两个知识点的PDF。
下面是这份资料的细节部分展示,手把手,保姆式教学,教你透彻理解这两个知识点,教你吊打面试官。
(一)Handler原理
1.Handler Looper Message 关系是什么?
分析 Handler
发送消息
…
2.Messagequeue 的数据结构是什么?为什么要用这个数 据结构?
为什么要用 Message Queue
Messagequeue 的数据结构是什么?
……
3.如何在子线程中创建 Handler?
……
4.Handler post 方法原理
源码分析
整理
……
5.Android 消息机制的原理及源码解析
消息机制概述
消息机制的源码解析
……
6.Handler 都没搞懂,拿什么去跳槽啊?
重识 Handler
Handler 原理解析
Handler 的延伸
……
7.Android Handler 消息机制中的迷惑行为
带有消息队列线程概述
带有消息队列线程的具体实现
……
(二)Binder原理
1.学习Binder前必须要了解的知识点
Linux中的IPC机制种类
Android中的IPC机制
Linux的IPC通信原理
Binder的通信原理
为什么要使用Binder
为什么要学习Binder?
2.ServiceManager中的Binder机制
基于Binder通信的C/S架构
MediaServer的main函数
每个进程唯一的ProcessState
ServiceManager中的Binder机制
…
3.系统服务的注册过程
从调用链角度说明MediaPlayerService是如何注册的
从进程角度说明MediaPlayerService是如何注册的
……
4.ServiceManager的启动过程
ServiceManager的入口函数
……
5.系统服务的获取过程
客户端MediaPlayerService请求获取服务
……
由篇幅有限,暂时展示部分,需要完整版的可以点击这里免费获取!