了解Framework层对一名Android工程师的工作有什么帮助吗?

最近有一个朋友向我问了一个这样的问题:

作为一个应用开发工程师,在网上有看到过大家都说了解系统源码,例如四大组件启动流程及IPC,Binder通信原理这些。而且我也有去看过,也觉得源码写的确实很精彩。但是,好像发现对实际工作上的帮助好像不太大。阅读framework源码是在性能调优上以及自己开发框架轮子等有帮助吗还是?

今天就以这个问题给大家讲解一下framework相关知识。

Framework的重要性

其实不需要别的,你去 Github 上看一下 腾讯 Matrix 的源码,就知道 Framework 的知识有多重要了。

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

另外 Framework 作为 Android 框架层,为 App 提供了众多 API 去调用 ,但是很多机制都是 Framework 包装好了给 App 来用的,如果不知道这些机制的原理,那么很难去在这基础上做优化。

举个例子,如果你了解 Android App 的启动机制,优化启动速度的时候会更得心应手:

定制什么样的 StartingWindow;什么时候可以拿到图片的宽高;DelayLoad 怎么做才会更合适;Service 什么时候启动可以不影响启动速度;Activity onResume 回调的时候真的可见了么?Redex 为什么会加快应用启动速度?

再比如我们经常说的 Handler,MessageQueue,Looper。看源码你就可以更好的理解那些概念:ThreadLocal 做什么的;Thread 和 Handler 的关系;为什么不能在子线程更新 UI?

再比如说 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 通信耗时也会导致卡顿,60 fps 下没问题的 app 90fps 下也可能会卡顿,有时候低内存下你主线程读个文件可能都会导致卡顿。**真正明白了卡顿的原理,再面对卡顿问题就不会那么慌了(Choreographer,VSync,SurfaceFlinger,Binder)。

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

以上只是个人的一些拙见,希望可以帮到你!

面试中那些Framework相关的问题

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

在Android面试中,关于 Framework 的问题是必备的,但是这些关于字节跳动 Framework 的高频面试题你都掌握了吗?

比如字节面试官常问的Framework问题知识点:

1.AMS 、PMS
2.Activity 启动流程,App 启动流程
3.Binder 机制(IPC、AIDL 的使用)
4.为什么使用 Parcelable,好处是什 么?
5.Android 图像显示相关流程,Vsync 信号等 …

怎么学习Framework?

阅读源码永远是学习最快的方式。

所以这里为大家整理了**《Android Framework精编内核解析》以及《Android Framework 开发揭秘》**,其中关于Framework与Binder的源码解析内容:

《Android Framework精编内核解析》

第一节 Binder 系列—开篇
第二节 Binder Driver 初探
第三节 Binder Driver 再探
第四节 Binder 启动 ServiceManager
第五节获取 ServiceManager
第六节注册服务(addService)
第七节获取服务(getService)
第八节 framework 层分析
第九节如何使用 Binder
第十节如何使用 AIDL
第十一节 Binder 总结
第十二节 Binder 面试题全解析

《Android Framework 开发揭秘》

以上内容都是免费分享,扫一扫下方二维码加助理小姐姐微信免费获取↓↓↓

不用多说,相信大家都有一个共识:无论什么行业,最牛逼的人肯定是站在金字塔端的人。所以,想做一个牛逼的程序员,那么就要让自己站的更高,成为技术大牛并不是一朝一夕的事情,需要时间的沉淀和技术的积累。

当你发现自己不懂的知识越来越多的时候,证明你懂的知识越来越多。

了解Framework层对一名Android工程师的工作有什么帮助吗?相关推荐

  1. 如何通过自学成为一名 Android 应用开发工程师?

    作者:陈昱全 链接:https://www.zhihu.com/question/21565227/answer/142800222 来源:知乎 1.初级之路 1.1 项目引路 对于自学的人来说,在边 ...

  2. Android10.0 Binder通信原理(八)-Framework层分析

    摘要:本节主要来讲解Android10.0 Binder 在Framework的使用分析 阅读本文大约需要花费15分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,An ...

  3. Framework层SMS发送

    前言:最近需要做iot上的相关需求,设计到短信app,本文梳理了Framework层的大致流程. 短信发送包括发送一般的短信.彩信. 发送的请求从app层通过SmsManager对象的sendMult ...

  4. Android Framework层的蓝牙管理

    1.1 蓝牙技术简介 蓝牙(Bleuetooth)原是十世纪统一了丹麦的一个国王的名字,现取其"统一"的含义,用来意在统一无线局域网通讯的标准的蓝牙技术.蓝牙技 术是爱立信,IBM ...

  5. android power 按键,Android Framework层Power键关机流程(一,Power长按键操作处理)

    一:Android处理Power按键长按操作 在Framework层中,Android4.x对Power键(KeyEvent.KEYCODE_POWER)的操作,我们从PhoneWindowManag ...

  6. Android Framework中的Application Framework层介绍

    Android的四层架构相比大家都很清楚,老生常谈的说一下分别为: Linux2.6内核层,核心库层,应用框架层,应用层.我今天重点介绍一下应用框架层Framework. Framework层为我们开 ...

  7. android重复拉起app首页_Android进程管理:Framework层概念

    前情回顾 RickAi,公众号:安卓尖端技术研究Android进程管理:从Kernel到LowMemoryKiller 上一篇文章从Native角度讲解了Android进程管理的相关概念,本文将继续从 ...

  8. android在framework层增加自己的service---仿照GPS

         不少公司在开发android产品的时候,都需要在android中增加自己的service,尤其是定制的工业用途的设备,我们公司的项目中就涉及到要增加一个service,是一个北斗通信serv ...

  9. Android开发如何定制framework层服务

    刚刚跨完年,新年第一篇文章,那么今天将对Android开发framework中间层的服务定制使用作个总结.首先我们先导入Android平台源码framework层的代码到开发工具eclipse中,代码 ...

最新文章

  1. linux系统监控:记录用户操作轨迹,谁动过服务器
  2. 【CyberSecurityLearning 37】网络安全常用Linux系统命令以及 源码包的安装过程
  3. BeautifulSoup 返回网页标签的名称、父标签名称、行号、完整路径
  4. office控件显示不了_计算机二级office考试重点难点总结,考生必看!
  5. 来吧学学.Net Core之项目文件简介及配置文件与IOC的使用
  6. 排列组合思维导图_排列组合——排列数专题
  7. 2020牛客暑期多校训练营(第二场)
  8. CAS(比较并交换)学习CAS实现原子性+volatile实现可见性,cas与synchronized比较的优缺点
  9. css怎样定义div大小,css如何设置div大小
  10. 【kafka】kafka 脚本 kafka-run-class.sh 使用介绍 jmx监控 查看jmx信息
  11. igress+nginx部署
  12. java dom获取命名空间属性_Java DOM XML解析::获取元素属性值
  13. 拓端tecdat|R语言在RCT中调整基线时对错误指定的稳健性
  14. 第十三届“恩智浦”杯全国大学生智能汽车竞赛-信标对抗组比赛总结
  15. python怎么解微分方程组_python能解微分方程吗
  16. Hybird A* 算法
  17. nrf52832 蓝牙组网_nrf52832 蓝牙开发
  18. 单击屏幕亮屏流程分析
  19. 阿里云DDoS防护是如何工作的?
  20. 网络通信原理与IP地址的分配原理,网络七层由下往上分别为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层

热门文章

  1. 新手学电脑入门教程_炒股技巧大全丨炒股新手怎样才能长期稳定盈利
  2. 电脑qq收藏在哪里_电脑突然死机了怎么办?几种常见电脑故障及其解决方法
  3. android如何查看分区信息,android如何查看分区信息
  4. C++知识点14——类与static
  5. floyd算法_最短路径的算法:Floyd算法
  6. spring 整合websoket(整理)
  7. +7白盒测试与黑盒测试的定义与区别
  8. 使用asp.net MVC4中的Bundle遇到的问题及解决办法
  9. JS判断浏览器类型的方法【转】
  10. spring实现listener(转)