我们首先给出Android Framework的定义,然后再对该定义给出详细的解释。
Android Framework包含三个内容:服务端、客户端、linux驱动
Android Framework服务端包括两个很重要的类:WindowManagerService (WMS)、ActivityManagerService(AMS)
客户端包含以下类:
Linux驱动和Framework相关的主要两个部分:画家SurfaceFlingeer和快递员Binder
每一个窗口都对应一个画Surface,SF主要是把各个surface显示到同一个屏幕,Binder则提供跨进程间的消息传递
从APK程序的运行过程中看,各个组件都在什么时候干什么样的活:
ActivityThread从main()函数中就开始动起来,然后调用PrepareMainLooper()为UI线程创建一个消息快递通道即MessageQueue(),
接着创建ActivityThread对象,创建过程会创建一个消息装卸工Handler对象和一个快递员Binder对象,其中Binder负责接收远程Ams的IPC调用,接收到调用后让Handler把消息装到消息队列,UI线程很忙的都是异步的从消息队列中取出消息并执行相应的操作,比如start,stop、pause
然后UI线程让队列调用Looper.loop()方法进入消息循环体,进入后就会不断的从消息队列中读取并处理消息
当ActivityThread接收到Ams发送start某个Activity的快递后就会创建指定的Activity对象。Activity会先按窗户再去按玻璃和贴窗花,所以先创建PhoneWindow->DecorView->创建相应的View或ViewGroup。创建完成后就可以让大家欣赏了,调用WindowManager把界面显示到屏幕上,然后创建ViewRoot,然后调用Wms提供的远程接口添加一个窗口并显示到屏幕上。
接下来就是用户的操作,事件线程不断的把消息快递发到事件队列中去,然后事件分发线程秘书逐个取出消息,然后调用Wms中的相应函数处理该消息。
本篇给大家分享一份业内大咖纯手写的Framework源码笔记,其中记录了从系统启动流程到WMS全部最新源码解析,相信能很好帮助大家学完整个Framwork框架。
第一节 Android启动概览
第二节 init.rc解析
第三节 Zygote
第四节 面试题
第一节 Sercice 还可以这么理解
第二节 Binder基础
第三节 Binder应用
第四节 AIDL应用(上)
第五节 AIDL应用(下)
第六节 Messenger原理及应用
第七节 服务端回调
第八节 获取服务(IBinder)
第九节 Binder面试题全解析
第一节 源码分析
第二节 难点问题
第三节Handler常问面试题
-第二节 Android架构
第三节 通信方式
第四节 系统启动系列
第五节 AMS
第六节 AMS 面试题解析
第一节 WMS与activity启动流程
第二节 WMS绘制原理
第三节 WMS角色与实例化过程
第四节 WMS工作原理
…
第一节 应用建立和SurfaceFlinger的沟通桥梁
第二节 SurfaceFlinger的启动和消息队列处理机制
第三节 SurfaceFlinger 之 VSync(上)
第四节 SurfaceFlinger之VSync(中)
第五节 SurfaceFlinger之VSync(下)