[转载]Andriod中的Context理解与分析(3)-Android开发进阶&经验分享-eoe Android开发者社区_Android开发论坛 – Powered by Discuz!.
需要打开一个Service的时候,ActivityManagerService会经过ApplicationThread的代理类
远程调用真正的ApplicationThread的scheduleCreateService()方法(这个里把ActivityManagerService当成了Binder客户端,
在ActivityThread中的ApplicationThread对象才是真正的Binder服务端)。
代码片段1
CreateServiceData代表一个Service的数据类
和上一篇文章一样,代码片段中的499行,调用H这个Handler实现类发消息到主线程的消息队列,然后,调用到
代码片段2
继续调用
1921行和之前获得LoadedApk 是同一个对象
继续这个方法的代码
从上面的代码可以得出:ContextImpl在Service中也是单独的
总结
从上面的代码可以看出,创建ContextImpl的过程很像,只是他们的数据对象不同罢了。并且每个类对应一个单独的ContextImpl。
类名 | 远程数据类 | 本地数据类 |
Application | ApplicationInfo | AppBindData |
Activity | ActivityInfo | ActivityClientRecord |
Service | ServiceInfo | CreateServiceData |
并且上面的三个类使用的是同一个pacageInfo(LoadedApk)对象。
Andriod中的Context理解与分析相关链接
(1)http://www.eoeandroid.com/thread-312457-1-1.html
(2)http://www.eoeandroid.com/thread-312978-1-1.html
(3)http://www.eoeandroid.com/thread-312979-1-1.html