前言
对于大多数 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的原理,作用,可以传递哪些型别的自变量?
**然后扩展到和这些知识点相关的更深层次的知识点细节,直到问的你答不上来为止,**以此来探寻你的技术边际,这样就能更深入地了解你的技术能力,
这些问题相信很多面试者都遇到过,但我面试的结果却表明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 平台的主要组件,
Android 平台的基础是 Linux 内核,例如,Android Runtime (ART) 依靠 Linux 内核来执行底层功能,例如执行绪和低层存储器管理,使用 Linux 内核可让 Android 利用主要安全功能,并且允许设备制造商为着名的内核开发硬件驱动程序,
此外还需要学习和掌握int行程,
init行程是Android系统中及其重要的第一个行程,init行程通常会做到以下几点,
- 创建和挂载启动所需要的档案目录
- 初始化和启动属性服务
- 决议init.rc组态档并启动Zygote行程
init.rc是一个非常重要的组态档,它是由Android初始化语言(Android Init Language)撰写的脚本,这里也是需要重点掌握和学习的,
最后不得不提zgyote了,作为Android中的第一个art虚拟机,他通过socket的方式与其他行程进行通信,这里的“其他行程”其实主要是系统行程——SystemServer,因此重要性不言而喻,
- 2.Binder决议
Binder机制作为行程间通信的一种手段,基本上贯穿了andorid框架层的全部,所以首先必须要搞懂的Android Binder的基本通信机制,
首先我们要宏观认识Binder,从binder框架、binder涉及到的类、binder驱动整体层面去重新认识它,
接下来再从binder的jni方法注册、binder驱动、资料结构、启动service_manager、获取service_manager、addService流程等逐级进行学习,
- 3.深入决议Handler
Message 原始码分析,再到MessageQueue 的原始码分析,Looper 的原始码分析,handler 的原始码分析,Handler 机制实作原理,既是面试常考,又是作业必备技能,
- 4.深入决议AMS
Android系统非常庞大、错综复杂,其底层是采用Linux作为基底,上层采用包含虚拟机的Java层以及Native层, 通过系统呼叫(Syscall)连通系统的内核空间与用户空间,用户空间主要采用C++和Java代码,通过JNI技术打通用户空 间的Java层和Native层(C++/C),从而融为一体,
Google官方提供了一张经典的四层架构图,从下往上依次分为Linux内核、系统库和Android运行时环境、框架 层以及应用层这4层架构,其中每一层都包含大量的子模块或子系统,
- 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官方认证二维码【免费获取】,希望对正在学习的你有所帮助!
需要《Android Framework 开发揭秘》这份资料的小伙伴,可以微信扫描下方CSDN官方认证二维码【免费获取】,希望对正在学习的你有所帮助!
最后
当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力,早早确定自己的职业方向,才能在作业和能力提升中甩开同龄人,
- 无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,这四个字就是我的建议!!!!!!!!!
- 我希望每一个努力生活的IT工程师,都会得到自己想要的,因为我们很辛苦,我们应得的,
0 评论