Android的Framework分析---5 ActivityManager分析
Posted cxchanpin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android的Framework分析---5 ActivityManager分析相关的知识,希望对你有一定的参考价值。
android系统开发交流群:484966421 OSHome。
微信公众号:oshome2015
ActivityManager是android框架的一个重要部分。它负责一新ActivityThread进程创建,Activity生命周期的维护,管理系统中的Acitvity的状态切换。
这边内容还有很多其它内容,具体请參看ActivityManager.java ,ActivityMangaerNative.java 和SystemServcer.java 文件。
这几个的类的关系例如以下:
上图非常清楚地描写叙述了ActivityManager框架的几个主要类之间的关系。我们做应用开发接触非常多的事实上就是ActivityManager类,该类也在SDK中发布。应用能够直接訪问,它提供了我们管理Activity的一些主要的方法
public List<RunningTaskInfo> getRunningTasks(int maxNum, int flags, IThumbnailReceiver receiver) throws SecurityException { try { return ActivityManagerNative.getDefault().getTasks(maxNum, flags, receiver); } catch (RemoteException e) { // System dead, we will be dead too soon! return null; } }这些方法都是没有实现,而是调用了AcitvityManagerNative的getDefault()方法返回对象实现。
/** * Retrieve the system‘s default/global activity manager. */ static public IActivityManager getDefault() { return gDefault.get(); } private static final Singleton<IActivityManager> gDefault = new Singleton<IActivityManager>() { protected IActivityManager create() { IBinder b = ServiceManager.getService("activity"); if (false) { Log.v("ActivityManager", "default service binder = " + b); } IActivityManager am = asInterface(b); if (false) { Log.v("ActivityManager", "default service = " + am); } return am; } };从上面的代码看出,从ServiceManager获取名字为activity的service。从AcitvityManagerService中有这么一句话
ActivityManagerService m = mSelf;
ServiceManager.addService(Context.ACTIVITY_SERVICE, m, true);而public static final String ACTIVITY_SERVICE = "activity";
因此IBinder b 事实上就是ActivityManagerService.
然而在ActivityManagerNative中asInterface的定义例如以下:
static public IActivityManager asInterface(IBinder obj) { if (obj == null) { return null; } IActivityManager in = (IActivityManager)obj.queryLocalInterface(descriptor); if (in != null) { return in; } return new ActivityManagerProxy(obj); }因此从以上代码能够看出 而这些操作都依赖于ActivityManagerProxy代理类的实现,IActivitManager接口定义了全部ActivityManager框架的操作,ActivityManagerProxy实现了接口IActivitManager。但并不真正实现这些方法,它仅仅是一个代理类,真正动作的运行为Stub类ActivityManagerService,ActivityManagerService对象仅仅有一个并存在于system_process进程中,ActivityManagerService继承于ActivityManagerNative存根类。
从前面分析知,ActivityManager存在于用户进程中。由用户进程调用获取Activity管理的一些基本信息,可是ActivityManager类并不真正运行这些操作,操作的真正运行在system_process进程中的ActivityManagerService,ActivityManagerService作为一个服务在system_process启动时被载入,关于ActivityManagerService怎样被载入这里不展开讨论,后面在讨论android系统启动时在探讨,那么从ActivityManager到ActivityManagerService中间经过一个环节,那就是进程通信。而IActivityManager以及实现接口的代理类ActivityManagerProxy,存根类ActivityManagerNative起着负责进程通信的作用,尽管这里没有使用aidl文件定义进程通信接口IActivityManager。事实上是一样的。我们能够把它看做是自己手动编译的aidl进程通信java类实现,ActivityManagerProxy是代理类。ActivityManagerNative是Stub类,IActivityManager是aidl接口。这样就非常easy理解了。
理解以上ActivityManager框架基本结构,后面深入研究它就要easy很多了。
以上是关于Android的Framework分析---5 ActivityManager分析的主要内容,如果未能解决你的问题,请参考以下文章
android framework系统源码分析之dumpsys原理分析-千里马带你学framework
android接收短信——framework处理流程(android 5.1)
android framework开发之广播broadcast源码分析-千里马