Android中ActivityManagerService的疑

作者: 好重 | 来源:发表于2019-03-04 23:43 被阅读2次

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.

Context的类层次结构
ContextWrapperContextImpl的代理类,在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运行在同一进程的典型案例。

相关文章

网友评论

    本文标题:Android中ActivityManagerService的疑

    本文链接:https://www.haomeiwen.com/subject/nmlguqtx.html