Android面试被虐千百遍,我待Framework如初恋~

76 篇文章 1 订阅
39 篇文章 0 订阅

Framework作为Android的框架层,为App提供了很多API调用,但很多机制都是Framework包装好后直接给App用的,如果不懂这些机制的原理,就很难在这基础上进行优化。

从做Android的第一天起,你一定听过无数次关于Framework的讨论,也曾在这个版块被面试官吊锤N次。

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

比如,如果你深入了解了Android App的启动机制,做启动优化一定会更加得心应手:

1.定制什么样的StartingWindow?
2.什么时候可以拿到图片的宽高?
3.DelayLoad怎么做才会更合适?
4.Service什么时候启动可以不影响启动速度?
5.Activity onResume回调的时候真的可见了么?
6.ContentProvider会不会影响启动速度?为什么会影响?

比如我们经常说的Handler、MessageQueue、Looper。看源码你就可以更好的理解那些概念:

1.Thread和Handler的关系
2.为什么不能在子线程更新UI?
3.idleHandler什么时候运行?
4.主线程为什么循环却不会卡死?
5.ContentProvider、Broadcast、Service是怎么利用Message监控ANR的?

比如说Android进程管理机制。AMS把Android进程按照一定的规则,设置不同的优先级,在内存比较低的时候,高优先级的App比低优先级的App更不容易被系统干掉!那么AMS是按照什么规则来设置优先级的呢?了解这些规则是不是可以提高App的存活率呢?这些都是可以通过熟读AMS的代码知道的。

再比如说Activity启动的模式,可能你会熟练使用各种模式,但是如果你学习Framework中Activity和进程的管理,知道Activity栈和Task的管理。那么你会对这启动模式的使用更加深刻。

再比如说View中的Hardware Layer,如果你只知道“在动画开始前将View设置为Hardware/Software Layer,做完动画再设置回去”,那么你会发现,在有些场景下,这么做会让动画变流畅,但是某些情况下动画会变得更差。如果不了解View的Hardware/Software Layer实现机制,盲目地给所有动画都这么设置,那么性能问题是在所难免的。

还有Android的卡顿掉帧问题,很多文章都说卡顿是由于主线程耗时造成的,这其实只是一部分,其他的比如:

  • RenderThread耗时也会导致卡顿
  • Binder通信耗时也会导致卡顿
  • 60fps下没问题的App 90fps或者120fps下也可能会卡顿
  • 有时候低内存下你主线程读个文件可能都会导致卡顿

真正明白了卡顿的原理,再面对卡顿问题也不会再手足无措。

正所谓知其然知其所以然,API 只是 Android 开发的一部分,底层的实现庞大而又复杂,不用心去读源码很难将知识点深入理解。

近期有出去面试过的朋友就该知道,现在的面试从头到尾都是比较有深度的技术问题,虽然那些问题看上去在网上都能查到相关的资料,但面试官基本都是根据你的回答持续深入,如果没有真正对技术原理和底层逻辑有一定的了解是无法通过的。

很多求职者抱怨大厂“面试造火箭,工作拧螺丝”,但实际上,面试中的大多数问题都是在全方位地考察你对技术的理解深度,以及解决问题的能力

其中,Framework作为面试必问的项目,在日常的工作中也会经常会要用到,Framework 知识广泛应用在Android各个领域中,并且始终穿插在 App 整个研发生命周期中,不管是从 0 到 1 的建立阶段,还是从 1 到 N 打磨阶段,都离不开Framework。

如今,国内移动互联网的红利期已经过去,Android 开发工程师也从最初的一人难求,到现在的一个岗位百人竞争,僧多粥少的情况直接导致整个行业对求职者的要求越来越高。可以说,初中级工程师基本已无立足之地,即使高级工程师也经常在面试中碰钉子。

而想要完全掌握常用技术底层原理,想要在最短的时间里突击学习,那么必须要跟着正确的学习路线一步步深挖!

为了帮助到大家解决这一困扰,这边耗时两个多星期时间进行精细化整理,将这《Android Framework学习笔记》 整理好了,里面记录了:有Handler、Binder、AMS、WMS、PMS、事件分发机制、UI绘制……等等,几乎把更Framework相关的知识点全都记录在册了,学习视频整理好了,由于平台限制就不展示了

《Framework 核心知识点汇总手册》:https://qr18.cn/AQpN4J

Handler 机制实现原理部分:
1.宏观理论分析与Message源码分析
2.MessageQueue的源码分析
3.Looper的源码分析
4.handler的源码分析
5.总结

Binder 原理:
1.学习Binder前必须要了解的知识点
2.ServiceManager中的Binder机制
3.系统服务的注册过程
4.ServiceManager的启动过程
5.系统服务的获取过程
6.Java Binder的初始化
7.Java Binder中系统服务的注册过程

Zygote :

  1. Android系统的启动过程及Zygote的启动过程
  2. 应用进程的启动过程

AMS源码分析 :

  1. Activity生命周期管理
  2. onActivityResult执行过程
  3. AMS中Activity栈管理详解

深入PMS源码:

1.PMS的启动过程和执行流程
2.APK的安装和卸载源码分析
3.PMS中intent-filter的匹配架构

WMS:
1.WMS的诞生
2.WMS的重要成员和Window的添加过程
3.Window的删除过程

《Android Framework学习手册》:https://qr18.cn/AQpN4J

  1. 开机Init 进程
  2. 开机启动 Zygote 进程
  3. 开机启动 SystemServer 进程
  4. Binder 驱动
  5. AMS 的启动过程
  6. PMS 的启动过程
  7. Launcher 的启动过程
  8. Android 四大组件
  9. Android 系统服务 - Input 事件的分发过程
  10. Android 底层渲染 - 屏幕刷新机制源码分析
  11. Android 源码分析实战

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值