美文网首页面试Android
Framework应用框架为什么重要呢?

Framework应用框架为什么重要呢?

作者: 不秃头的程序猿 | 来源:发表于2022-03-19 20:30 被阅读0次

    对于绝大多数 Android 开发工程师来说,掌握Android Framework 一直是一个不光要熟练而且必须要精通的技能。Framework这个应用框架是Android开发中最基础,但同时也是最重要的。Framework包含了Android IPC Binder机制、Handler消息机制、Dalvik VM进程系统、AMS、WMS和Package Manager Service等等。而这些类别里又包含很多小类,有许多的分支,每一个小类里还有很多小细节,这些都是Android开发工程师必须熟练掌握和精通的技能。
    如果做成一个框架图的话,就是下面这样的:这只是一个简单的框架图,其实还有很多分支



    很多大厂公司在面试的时候都会有很多的技术面试题,这是考察程序员必不可少的题目。
    比方说:

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

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

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

    Binder是Android系统中最重要的组成
    Binder是什么呢?请看下图,图是最能清楚明了的直观表达的工具


    Binde相比于其他通信方式的优势
    Android 系统是基于 Linux 内核的,Linux 已经提供了管道、消息队列、共享内存和 Socket 等 IPC 机制。那为什么 Android 还要提供 Binder 来实现 IPC 呢?主要是基于性能、稳定性和安全性几方面的原因。

    优势描述
    性能:只需要一次数据拷贝,性能上仅次于共享内存
    稳定性:基于C/S架构,职责明确,架构清晰,因此稳定性好
    安全性:为每个App分配UID,进程的UID是鉴别进程身份的重要标志
    Android IPC Binder机制包含了:Linux预备知识、传统的Linux中IPC通信原理、Binder IPC通信原理和Binder Java层实现,这些里面都各有好多小分支,小细节需要仔细的去学习掌握。
    腾讯高级工程师Binder面试
    1.为什么 Android 要采用 Binder 作为 IPC 机制?
    2.Binder到底是什么?
    3.Binder机制是如何跨进程的?
    4.一次Binder通信的基本流程是什么样?
    5.为什么 Activity 间传递对象需要序列化?
    6.四大组件底层的通信机制是怎样的?
    7.AIDL 内部的实现原理是什么?
    这些都是关于Binder机制面试时会问到的点。


    Handler消息机制
    1.handler是什么?

    Handler主要用于异步消息的处理: 有点类似辅助类,封装了消息投递、消息处理等接口。当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分在消息队列中逐一将消息取出,然后对消息进行处理,也就是发送消息和接收消息不是同步的处理。 这种机制通常用来处理相对耗时比较长的操作。
    2、为什么要用handler?

    为什么要用handler?不用这种机制行不行?不行!android在设计的时候,就封装了一套消息的创建、传递、处理机制,如果不遵循这种机制,就没有办法更新UI信息,就会抛出异常信息。

    在android开发中,经常会在子线程中进行一些操作,当操作完毕后会通过handler发送一些数据给主线程,通知主线程做相应的操作。探索其背后的原理:子线程handler主线程其实构成了线程模型中的经典问题生产者-消费者模型。生产者-消费者模型:生产者和消费者在同一时间段内共用同一个存储空间,生产者往存储空间中添加数据,消费者从存储空间中取走数据。


    AMS
    Android系统非常庞大、错综复杂,其底层是采用Linux作为基底,上层采用包含虚拟机的Java层以及Native层,通过系统调用(Syscall)连通系统的内核空间与用户空间。用户空间主要采用C++和Java代码,通过JNI技术打通用户空间的Java层和Native层
    AMS面试题解析
    1. ActivityManagerService是什么?什么时候初始化的?有什么作用?
    2. ActivityThread是什么?ApplicationThread是什么?他们的区别
    3. Instrumentation是什么?和ActivityThread是什么关系?
    4. ActivityManagerService和zygote进程通信是如何实现的?
    5. ActivityRecord、TaskRecord、ActivityStack,ActivityStackSupervisor,ProcessRecord

      深入理解WMS
      WMS是android中的一个重要的系统服务,用于窗口管理。从其内部实现来看,包含以下的一些功能
      窗口的添加与删除
      启动窗口
      窗口动画
      窗口大小
      窗口层级
      Framework为什么重要,在上文的一系列叙述中,我想大家都会有所体会。它的技术点范围实在是太多了,我今天也只是挑一些非常重要的点来分享一下。仅仅靠 一篇文章是不可能叙述全面的,还得靠大家自己去系统的学习,但我会一直发文分享,希望对各位有所帮助。如果文中有错误的地方,望包含,请大家帮忙指正。

    相关文章

      网友评论

        本文标题:Framework应用框架为什么重要呢?

        本文链接:https://www.haomeiwen.com/subject/qoxndrtx.html