HardBirch

ActivityManagerService基本构架详解

时间:14-04-08 栏目:Android探究 作者:魔豆先生 评论:0 点击: 1,984 次

学习AmS有段时日了,总结下,也好梳理一下自己的思路。小兵一个,有些地方理解不对,大家可以互相讨论,交流才有进步吗~~~

AmS可以说是Android上层系统最核心的模块之一,其主要完成管理应用进程的生命周期以及进程的Activity,Service,Broadcast和Provider等。

从系统运行的角度看,AmS可以分为Client端和Service端:Client端运行在各个app进程,app进程实现了具体的 Activity,Service等,告诉系统我有那些Activity,Service等,并且调用系统接口来完成显示;Service端运行在 SystemServer进程,是系统级别的ActivityManagerService的具体实现,其响应Client端的系统调用请求,并且管理 Client端各个app进程的生命周期。


图1 AmS基本类图

如上面AmS基本类图,在Client端,我们平常接触的Application,Service和Activity都是Context的子 类,Context理解为环境,上下文,也就是它能够告诉系统当前我运行的Activity,Service的情况,显示那些View,干那些活等。 Context是一个abstract类,定义的方法具体实现在ContextImpl中,ContextWrapper作为Context的装饰类,里 面的成员变量mBase指向ContextImpl,当然这儿并不是一定要执行ContextImpl,只要是继承了Context,实现了里面定义的接 口,都可以实例化mBase对象。

另外我们注意到我们调用很多Android的接口,必须要传入Context对象,通常我们直接将Activity对象作为参数传入,如果方法内部定义全 局变量或者static的变量,导致长期占用mContext引用,这就会导致Activity对象无法被JVM回收,对此这样的引用占用,很可能导致 OOM。我们注意到Application也是继承自Context,所以Application也是Context,我们知道Application在 一个应用启动时就创建,所以我们的app一直存在着全局的Context对象——Application对象,那么我们在一些已知的全局占用 Context对象引用的方法调用上可以传递Application对象来避免上面所说的OOM。

IActivityManager接口定义了app访问AmS的接口,主要是应用请求AmS要完成某些操作,比如启动、finish某个 Activity,启动、stop某个Service。ActivityManagerService实现了IActivityManager中定义的接 口,该类可以说是AmS的核心,AmS的所有具体工作基本上都在该类中或者通过该类控制,ActivityManagerService的实例在进程 SystemServer刚启动时初始化。IApplicationThread接口定义了AmS可以访问app的接口,AmS通过这些接口控制app进 程以及完成app的响应,ApplicationThread是IApplicationThread接口的具体实 现,ApplicationThread的实例是在app进程启动时创建ActivityThread对象时初始化,ActivityThread的成员 变量mAppThread就是ApplicationThread对象。另外为了实现跨进程调用,ActivityManagerProxy和 ApplicationThreadProxy分别实现了IActivityManager和IApplicationThread接口,其作为各自的代 理供client和server使用。

AmS也是作为一个系统服务,通过ActivityManager定义了一些借口可以供app使用,ActivityManager中访问AmS的接口都是通过ApplicationThreadProxy实现的。

如下图是AmS内部主要数据结构类图,看了code相信大家都会知道这些类都是干什么的,这儿只是总结一下。

图2 AmS内部主要数据结构类图

声明: 本文由( 魔豆先生 )原创编译,转载请保留链接: ActivityManagerService基本构架详解

ActivityManagerService基本构架详解:等您坐沙发呢!

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐