Android大厂面试必问的Android Framework 如何学习,如何深入了解Framework层?

前言

对于大多数 Android 开发工程师来说,掌握Android Framework 一定是一个不光要熟练而且还要精通的技能。

高级 Android 工程师岗位的一些技术面试也离不开Framework。一般会针对下面几个面试题进行提问:

  • 1.Android中多进程通信的方式有哪些?
  • 2.进程通信你用过哪些?原理是什么?(字节跳动、小米)
  • 3.描述下Binder机制原理?(东方头条)
  • 4.Binder线程池的工作过程是什么样?(东方头条)
  • 5.Handler怎么进行线程通信,原理是什么?(东方头条)
  • 6.Handler如果没有消息处理是阻塞的还是非阻塞的?(字节跳动、小米)
  • 7.handler.post(Runnable) runnable是如何执行的?(字节跳动、小米)
  • 8.handler的Callback和handlemessage都存在,但callback返回true handleMessage还会执行么?(字节跳动、小米)
  • 9.Handler的sendMessage和postDelay的区别?(字节跳动)
  • 10.IdleHandler是什么?怎么使用,能解决什么问题?
  • 11.为什么Looper.loop不阻塞主线程?(腾讯)
  • 12.Looper无限循环为啥没有ANR(B站)
  • 13.Looper如何在子线程中创建?(字节跳动、小米)
  • 14.Looper、handler、线程间的关系。例如一个线程可以有几个Looper可以对应几个Handler?(字节跳动、小米)
  • 15.如何更新UI,为什么子线程不能更新UI?(美团)
  • 16.ThreadLocal的原理,以及在Looper是如何应用的?(字节跳动、小米)
  • 17.Android 有哪些存储数据的方式?
  • 18.SharedPreference原理,commit与apply的区别是什么?使用时需要有哪些注意?(腾讯)
  • 19.如何判断一个 APP 在前台还是后台?
  • 20.如何做应用保活?
  • 21.一张图片100x100在内存中的大小?(字节跳动)
  • 22.Intent的原理,作用,可以传递哪些类型的参数?

**然后扩展到和这些知识点相关的更深层次的知识点细节,直到问的你答不上来为止,**以此来探寻你的技术边际,这样就能更深入地了解你的技术能力。

image

这些问题相信很多面试者都遇到过,但我面试的结果却表明Android Framework框架层原理的掌握并没有到人尽皆知的境地。不过也好,这些问题就可以很容易区分出面试者是否对Android开发真的还有热情。

如果非要总结Framework学习中的问题,大家遇到的困惑无非是这些方面:

  • 1.开发遇到Bug,百度不到,而你不懂框架里面的黑盒机制
  • 2.项目代码想到哪写到哪,每次迭代就是一场轮回?你不想知道Android这么庞大的源码体系是怎么设计的?
  • 3.学完就忘,不会使用,原理结合实战通过Framework学习知识点的使用。

Android Framework重要性

Android Framework 开发虽然比较偏底层,圈子窄,但是能掌握一些原理的东西,可以触类旁通,往应用层发展也可以,接下来我们看看Framework知识有多重要。举几个栗子,你或许就能清楚了。

像掉帧监控,函数插装,慢函数检测,ANR 监控,启动监控,都需要对 Framework 有比较深入的了解,才能知道怎么去做监控,利用什么机制去监控,函数插桩插到哪里,反射调用该反射哪个类哪个方法哪个属性……

目前大公司的app开发都要基于模块化、层次化、组件化、控件化的思路来设计架构,而这一切的基础都建立在Android Framework系统框架底层原理实现之上。

如何学习Android Framework

  • 1.系统启动流程分析
    众所周知,Android是谷歌开发的一款基于Linux的开源操作系统,下图所示为 Android 平台的主要组件。

image

Android 平台的基础是 Linux 内核。例如,Android Runtime (ART) 依靠 Linux 内核来执行底层功能,例如线程和低层内存管理。使用 Linux 内核可让 Android 利用主要安全功能,并且允许设备制造商为著名的内核开发硬件驱动程序。

此外还需要学习和掌握int进程。
init进程是Android系统中及其重要的第一个进程,init进程通常会做到以下几点。

  1. 创建和挂载启动所需要的文件目录
  2. 初始化和启动属性服务
  3. 解析init.rc配置文件并启动Zygote进程

init.rc是一个非常重要的配置文件,它是由Android初始化语言(Android Init Language)编写的脚本,这里也是需要重点掌握和学习的。
最后不得不提zgyote了,作为Android中的第一个art虚拟机,他通过socket的方式与其他进程进行通信。这里的“其他进程”其实主要是系统进程——SystemServer。因此重要性不言而喻。

  • 2.Binder解析

Binder机制作为进程间通信的一种手段,基本上贯穿了andorid框架层的全部。所以首先必须要搞懂的Android Binder的基本通信机制。

首先我们要宏观认识Binder,从binder框架、binder涉及到的类、binder驱动整体层面去重新认识它。

image

binder框架

接下来再从binder的jni方法注册、binder驱动、数据结构、启动service_manager、获取service_manager、addService流程等逐级进行学习。

  • 3.深入解析Handler

Message 源码分析,再到MessageQueue 的源码分析,Looper 的源码分析,handler 的源码分析,Handler 机制实现原理,既是面试常考,又是工作必备技能。

Handler 机制实现原理
  • 4.深入解析AMS

Android系统非常庞大、错综复杂,其底层是采用Linux作为基底,上层采用包含虚拟机的Java层以及Native层, 通过系统调用(Syscall)连通系统的内核空间与用户空间。用户空间主要采用C++和Java代码,通过JNI技术打通用户空 间的Java层和Native层(C++/C),从而融为一体。
Google官方提供了一张经典的四层架构图,从下往上依次分为Linux内核、系统库和Android运行时环境、框架 层以及应用层这4层架构,其中每一层都包含大量的子模块或子系统。

image

  • 5.深入解析 WindowManagerService
    简称Wms,WindowManagerService管理窗口的创建、更新和删除,显示顺序等,是WindowManager这个管理接品的真正的实现类。它运行在System_server进程,作为服务端,客户端(应用程序)通过IPC调用和它进行交互。
  • 6.PackagerManagerService
    PKMS 是什么东西?

PackageManagerService(简称 PKMS),是 Android 系统中核心服务之一,负责应用程序的装**,卸载,**信息查询,等工作。

大佬云集、资料丰富

当初我在腾讯认识一个非常非常资深的前辈,他在腾讯十来年了,但因为各种原因级别不是很高。我当时问他,既然你对现状如此不满,为什么不想着离开寻找更好的机会呢?

他沉思了片刻跟我说,他说我现在在这里虽然待着不顺心,但是我接触到的人都是非常优秀的。我遇到问题,还可以和你们讨论讨论。我如果出去了,我要是再遇到问题,可能连一个讨论的人都没有。

我当时听听只是觉得有道理,现在再回想起来,感受非常深刻。三观、格局、能力,能够进入大公司的,这三个方面一般都不会太差。除了优秀的同事之外,大公司里往往还有丰富的内部文档和资料。

我当时在腾讯内部看到了很多优秀的文章,也有很多优秀的技术沙龙和分享。现在想起来两年下来,也没有去过几次,文章和资料看得也不算多,现在想想颇为遗憾。别的不说,就拿推荐领域而言,近些年质量不错的论文往往都来源于大公司尤其是国内的大公司,以腾讯、华为和头条为主。除了公开的论文,公司内部还有很多技术相关的资料和文档,这些真的可以说是有价无市,非常珍贵。

例如:《Android Framework 开发揭秘》
**这份由腾讯技术团队出品的《Android Framework 开发揭秘》总共有19万字,包含109个知识点,**通过经典Binder、Handler、AMS等面试题解析加深你对Android Framework框架层的理解,需要《Android Framework 开发揭秘》这份资料的小伙伴,可以微信扫描下方CSDN官方认证二维码【免费获取】,希望对正在学习的你有所帮助!

image

需要《Android Framework 开发揭秘》这份资料的小伙伴,可以微信扫描下方CSDN官方认证二维码【免费获取】,希望对正在学习的你有所帮助!

最后

当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。

  • 无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,这四个字就是我的建议!!!!!!!!!
  • 我希望每一个努力生活的IT工程师,都会得到自己想要的,因为我们很辛苦,我们应得的。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>