四大天王原理思考小结.

来源:互联网 发布:centos nginx 多站点 编辑:程序博客网 时间:2024/04/27 15:02

Activiity
0. AMS(Activity Manager Service)系统关键服务,可以创建应用程序进程,并负责启动和调度应用程序组件。每个Activity维护一个名为mToken的binder代理对象,指向AMS中的ActivityRecord(binder本地对象).AMS将每个应用程序进程用ProcessRecord对象来描述.简而言之:AMS维护了 ActivityRecord(包括其他组件) ProcessRecord TaskRecord这三个对象。(TaskRecord 记录了真实的Activity实例是属于哪个Task的。Task通过一个int类型的TaskId来唯一标识,该值标识启动这个Activity的调用者,在手机重启时将会被置零。)
1. 可以将不同组件的android:process属性设置为相同名称,它们将运行在同一个进程.
2. 显式启动看类名,隐式启动看组件名即可.
3. 在ActivityThead内部,用一个loadAPK对象来描述一个已经加载的APK文件.
4. 若A Activity 启动了 B Activity 则 AB 拥有相同的UID.
Activity启动过程:http://www.cnblogs.com/bastard/archive/2012/04/07/2436262.html
这个过程使用了代理模式,有个类叫Activity ManagerProxy,内部维护了一个binder代理对象, 用于发起进程通信请求. 进程通信请求将被AMS处理. 而线程的创建是通过ApplicationThreadProxy 代理完成的.

Service
1.Activity 与 service 绑定后 可以在Activity中通过binder机制获取service实例,从而调用service中定义的方法.
2.每一个Service在AMS中都有一个serviceRecord变量用于描述service状态.
3.在AMS启动service 或者Activity前都会判断 Record对象中描述的process 是否存在.
4.Activity 与 Service的绑定也是由AMS完成滴. AMS 会将 service的binder本地对象发送给Activity.
左边ActivityProxy 中间AMS. 右边ApplicationProxy

Broadcast
Broadcast机制就是在binder进程间通信机制的基础上实现的.
与Binder不同:
1.client与service通信,client需要获取service的代理对象. 而广播发送者不需要知道广播接收者的存在.
2.只有Activity 与service 拥有发送广播的技能.
与Binder相同:
1.广播的注册中心就是AMS.由AMS 协调 boradcast发送者与接收者.

Content Provider
Android 系统可以根据用户ID 来保护用户数据不被 其他应用程序破坏。不同应用程序可以通过匿名共享内存传输大数据。
content Provider 可以提供N个APP数据,这些数据可以是 SQLite FILD Internet 等等。

1.每一个content Provider 都是通过URI来访问的。
2.content provider 返回给Activity的其实是一个SQLITEcursor对象(由provider创建 并不是binder本地对象 通过cursorAdapter(一个实现了ibander接口的适配器)来返回) 该cursor对象引用了一块匿名共享内存. (描述很简陋- -~!)
3.当content provider 数据更新时,将告知content service. -> content observ。
4.数据的更新使用了观察者模式. content provider组件发送数据更新的消息给 content Service。 再由content Service 转发消息给content observer(内容观察者).

0 0
原创粉丝点击