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

本文解析了Android系统中ActivityManager的工作原理及其实现机制,重点介绍了ActivityManager与ActivityManagerService之间的交互过程,以及它们如何通过进程间通信进行协作。

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

这边内容还有更多内容,详细请参看ActivityManager.java ,ActivityMangaerNative.java 和SystemServcer.java 文件。
这几个的类的关系如下:   

    
        上图很清楚地描述了ActivityManager框架的几个主要类之间的关系,我们做应用开发接触很多的其实就是ActivityManager类,该类也在SDK中公布,应用可以直接访问,它提供了我们管理Activity的一些基本的方法

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. public List<RunningTaskInfo> getRunningTasks(int maxNum, int flags, IThumbnailReceiver receiver)  
  2.             throws SecurityException {  
  3.         try {  
  4.             return ActivityManagerNative.getDefault().getTasks(maxNum, flags, receiver);  
  5.         } catch (RemoteException e) {  
  6.             // System dead, we will be dead too soon!  
  7.             return null;  
  8.         }  
  9.     }  
  这些方法都是没有实现,而是调用了AcitvityManagerNative的getDefault()方法返回对象实现。

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /** 
  2.     * Retrieve the system's default/global activity manager. 
  3.     */  
  4.    static public IActivityManager getDefault() {  
  5.        return gDefault.get();  
  6.    }  
  7.   
  8.  private static final Singleton<IActivityManager> gDefault = new Singleton<IActivityManager>() {  
  9.        protected IActivityManager create() {  
  10.            IBinder b = ServiceManager.getService("activity");  
  11.            if (false) {  
  12.                Log.v("ActivityManager""default service binder = " + b);  
  13.            }  
  14.            IActivityManager am = asInterface(b);  
  15.            if (false) {  
  16.                Log.v("ActivityManager""default service = " + am);  
  17.            }  
  18.            return am;  
  19.        }  
  20.    };  
从上面的代码看出,从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的定义如下:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. static public IActivityManager asInterface(IBinder obj) {  
  2.        if (obj == null) {  
  3.            return null;  
  4.        }  
  5.        IActivityManager in =  
  6.            (IActivityManager)obj.queryLocalInterface(descriptor);  
  7.        if (in != null) {  
  8.            return in;  
  9.        }  
  10.   
  11.        return new ActivityManagerProxy(obj);  
  12.    }  
因此从以上代码可以看出 而这些操作都依赖于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接口,这样就很容易理解了。


        理解以上ActivityManager框架基本结构,后面深入研究它就要容易许多了。

Android Framework 层是 Android 系统中非常重要的一层,它提供了丰富的 API 和服务,包括 Activity、Service、Content Provider、Broadcast Receiver、PackageManager、Window Manager 等等,它们为应用程序提供了一个丰富的运行环境和开发框架。 Android Framework 层的源码主要包括以下几个部分: 1. Activity Manager:负责管理 Android 应用程序的生命周期、进程和任务栈等。 2. Package Manager:负责管理应用程序的安装、卸载和更新等操作。 3. Content Provider:提供了一种标准的接口,让应用程序之间可以共享数据。 4. Telephony Manager:提供了访问手机通讯功能的接口和服务。 5. Location Manager:提供了访问 GPS 和其他位置服务的接口和服务。 6. Notification Manager:提供了管理通知的接口和服务。 7. View System:提供了 Android 应用程序的 UI 界面的渲染和事件处理等功能。 8. Resource Manager:提供了访问 Android 应用程序的资源文件的接口和服务。 9. Window Manager:提供了窗口管理和界面绘制等功能。 10. Activity Manager Service:提供了 Activity Manager 的服务接口。 11. System Server:提供了 Android 系统的核心服务,包括 PackageManager、ActivityManager、WindowManager 等。 以上是 Android Framework 层源码的主要部分,通过阅读 Android Framework 层源码可以深入了解 Android 系统的实现原理和应用程序的开发框架。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值