一。整体把握
framework架构图
分层:application framework,binder IPC, system service
application framework 通过 binder IPC 与 system service 通信
整个framework架构 是为了实现 application与 system的进程通信,
分层的目的和作用:类似网络分层
实现 上层与下层 之间固定的通信模式
双方的同层 之间采用相同的协议
二。具体学习
1.startActivity 系统级的API
流程图
1.application framework 调用 System Service AMS:
2.AMS 调用上层 framework 创建Activity对象,并调用其生命周期回调方法
总结:系统创建MyActivity对象并调用其生命周期函数,用到控制反转IOC
高层通过反射创建低层对象,高层调用低层的回调方法
开发者没有new 出对象, 也不能直接控制Activity对象的生命周期,
系统控制Activity对象的生命周期
onCreate/onStart...这些生命周期方法,是模版模式。
模版模式 是父类中有一个模版方法,这个方法里调用了一些自身的方法来实现一个功能,
这些方法中,一些是对于所有子类来说,是一致的,不变的, 可用fianl修饰
而另一些方法,对于不同的子类,有不同的代码实现,是变化的,
针对这些可变化的方法,子类自己去代码实现,它们往往是abstract或是空方法(钩子)
设计模式的关键是封装修改,模版模式利用 继承 和 子类重写方法 来实现将一个功能中不变和可变的代码分隔开来,可变的部分 子类通过重写来实现修改。
架构图
整个过程是 application 请求 SystemService
SystemService 返回application结果
2.camera的架构
1.camera 打开摄像头: application 访问 CameraService CameraService与HAL 交互,打开摄像头,并创建CameraClient对象
2.照相: application 访问CameraService,完成照相,CameraService 访问 application 返回数据
涉及到了JNI
3.binder 架构
Binder 建立application framework 与 System Service通信的流程
1.获取ServiceManger
2.通过ServiceManger获取到XXXService,如CameraService
3.与XXXService通信
client,xxxservice端都是通过持有的进程对象ProcessState创建线程,每个线程负责一条binder的通信通道,
双方都有相同的接口 IXXXService 类似网络分层,client,server同层之间拥有相同的协议
client请求service 是通过持有的service方的XXXService的代理BpXXXService,对其请求,请求通过Binder driver 传递给BnXXXService,BnXXXService把请求交给XXXService
XXXService对client的请求作出响应,响应通过持有的client方的BnXXX的代理BpXXX,在通过与Binder driver通信,Binder driver 将响应传递给client方的BnXXX,BnXXX向上传递,最终完成client/service 的请求响应。类似http请求响应的流程。