[转载]Andriod中的Context理解与分析(2)-Android开发进阶&经验分享-eoe Android开发者社区_Android开发论坛 – Powered by Discuz!.
Activity对应的Context
需要打开一个Activity的时候,ActivityManagerService会经过ApplicationThread的代理类
远程调用真正的ApplicationThread的scheduleLaunchActivity()方法(这个里把ActivityManagerService当成了Binder客户端,
在ActivityThread中的ApplicationThread对象才是真正的Binder服务端)。
代码片段1
415行创建了一个ActivityClientRecord的对象 ,这个对象用来管理Activity
417-427行,把ActivityManagerService远程传过来的参数赋值给这个对象
代码片段2
ActivityInfo是远程返回的一个包装Activity信息的实体类,实现了Parcelable接口
和上一篇文章一样,代码片段中的429行,调用H这个Handler实现类发消息到主线程的消息队列,然后,调用到
代码片段3
929行:通过getPackageInfoNoCheck()获得packegeInfo赋值给ActivityClientRecord的packageInfo变量,这样就把Activity和
一个程序关联上了。
看下下面的获取代码:
代码片段3
代码片段4
从以上代码可以看到,这个packageInfo是和Application中的packageInfo是同一个对象(同一个LoadedApk对象)。
回到代码片段3中的931行执行:handleLaunchActivity(r, null);
代码片段5
看下1663行,方法代码如下
…..
…….
从上面的代码可以看出和Application的创建过程类似,也是单独放进去一个ContextImpl对象。
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