ActivityThread代表应用进程的主线程,SystemServer并不是应用进程,为什么SystemServer进程里边需要ActivityThread呢?
其实SystemServer也会包含一些Activity,比如系统关机对话框等,因此可以说,SystemServer是一个特殊的应用进程。应用进程指那些运行APK的进程,它们由Zygote 派生(fork)而来,上面运行了dalvik虚拟机。与应用进程相对的就是系统进程(包括Zygote和SystemServer)。
注意,在应用进程中,通过调用ActivityThread
类的main()
函数得到ActivityThread
的对象,而在SystemServer进程中,则是调用systemMain()
函数。在SystemServer进程中,ActivityThread
对象是由一般的线程创建的,而在应用进程中,ActivityThread
对象是由应用主线程创建的。
Context是什么?
Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc.
ContextWrapper
是ContextImpl
的代理类,在ContextWrapper
中是mBase
变量,ContextWrapper
的内部实现最终都是由ContextImpl
实现的,这样做的目的是把ContextImpl
隐藏起来。
framework-res.apk是什么?
可以学习《深入理解PackageManagerService》,它的包名是“android”。思考framework-res.apk仅供SystemServer使用吗?
PackageManagerService属于SystemServer进程吗?
待考察。
应用进程也加载了framework-res.apk这个包,所以应用进程里边有两个Application?
待考察。
ActivityManagerService进程怎么与应用进程交互?
ActivityManagerService
对象中的ActivityThread
保存着一个成员变量,叫做ApplicationThread
,它实现了IApplicationThread
接口,是个Binder
对象,其中有一些成员方法,比如scheduleStopActivity()
,scheduleLaunchActivity()
,scheduleStopService()
等,SystemServer进程通过ActivityThread
对象的这些方法,发送消息给应用进程的ActivityThread
中的ApplicationThread
,调用相应的方法,从而在主线程中执行相应组件的生命周期方法。
多个Apk可以运行在同一个进程?
SystemServer已经加载了framework-res.apk,现在又要加载另外一个APK文件,这就是多个APK运行在同一进程的典型案例。