Android的Framework分析---5 ActivityManager分析

智慧并不产生于学历,而是来自对于知识的终生不懈的追求。这篇文章主要讲述Android的Framework分析---5 ActivityManager分析相关的知识,希望能为你提供帮助。
 
android系统开发交流群:484966421 OSHome。

微信公众号:oshome2015

Android的Framework分析---5 ActivityManager分析

文章图片




ActivityManager是android框架的一个重要部分。它负责一新ActivityThread进程创建,Activity生命周期的维护,管理系统中的Acitvity的状态切换。

这边内容还有很多其它内容,具体请參看ActivityManager.java ,ActivityMangaerNative.java 和SystemServcer.java 文件。
这几个的类的关系例如以下:    
Android的Framework分析---5 ActivityManager分析

文章图片

     
              上图非常清楚地描写叙述了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分析】 






    推荐阅读