1.ActivityManager是android框架的一个重要部分,它负责一新ActivityThread进程创建,Activity生命周期的维护,本blog就是着手对ActivityManager框架作一个整体的了解
2.先看一个静态类结构图:
该图摘自 曹文斌blog<Activity Manager框架解析>
上图很清楚地描述了ActivityManager框架的几个主要类之间的关系,我们做应用开发接触很多的其实就是ActivityManager类,该类也在SDK中公布,应用可以直接访问,它提供了我们管理Activity的一些基本的方法
如下:
public void testgetRecentTasks()
//获取最近的应用,最后启动的排前
public void testgetRunningTasks()
//获取当前运行的Activity应用
public void testgetRunningServices()
//获取当前运行的service应用
public void testgetRunningAppProcesses()
//获取所用系统运行的进程
而这些操作都依赖于ActivityManagerProxy代理类的实现,IActivitManager接口定义了所有ActivityManager框架的操作,ActivityManagerProxy实现了接口IActivitManager,但并不真正实现这些方法,它只是一个代理类,真正动作的执行为Stub类ActivityManagerService,ActivityManagerService对象只有一个并存在于system_process进程中,ActivityManagerService继承于ActivityManagerNative存根类。
3.从前面分析知,ActivityManager存在于用户进程中,由用户进程调用获取Activity管理的一些基本信息,但是ActivityManager类并不真正执行这些操作,操作的真正执行在system_process进程中的ActivityManagerService,ActivityManagerService作为一个服务在system_process启动时被加载,关于ActivityManagerService如何被加载这里不展开讨论,后面在讨论android系统启动时在探讨,那么从ActivityManager到ActivityManagerService中间经过一个环节,那就是进程通信,而IActivityManager以及实现接口的代理类ActivityManagerProxy,存根类ActivityManagerNative起着负责进程通信的作用,我在前面的blog aidl实现机制浅析中有对进程通信作了较深入的分析,虽然这里没有使用aidl文件定义进程通信接口IActivityManager,其实是一样的,我们可以把它看做是自己手动编译的aidl进程通信java类实现,ActivityManagerProxy是代理类,ActivityManagerNative是Stub类,IActivityManager是aidl接口,这样就很容易理解了。
4.ActivityManager提供了很少的方法,要能够使用IActivityManager接口提供的其他方法我们可以直接使用ActivityManagerProxy对象,如何获取?
return ActivityManagerNative.getDefault()
不要被方法名称所迷惑,由于我们在用户进程调用,是不可能获取一个ActivityManagerNative对象的(再说ActivityManagerNative是一个abstract类),我们实际获取的是一个ActivityManagerProxy对象
理解以上ActivityManager框架基本结构,后面深入研究它就要容易许多了。
分享到:
相关推荐
4. **Android Framework**:这是Android应用开发的基础,包括ActivityManager、ContentProvider、BroadcastReceiver、Service等关键组件。分析框架层源码有助于理解它们的实现原理和交互方式。 5. **Dalvik/ART...
3. **内存管理**:Android提供了ActivityManager.RunningAppProcessInfo类来获取当前运行进程的内存使用情况。通过解析系统文件,如/proc/meminfo,可以获取更详细的内存统计信息。 4. **CPU监控**:访问/proc/stat...
在应用框架层,开发者可以使用`ActivityManager`或`View`类提供的截图API来实现截图。例如,`Activity.retainNonConfigurationInstances()`可以获取当前活动的截图,而`View.drawToBitmap()`则能将指定视图绘制到位...
本篇文章将围绕“安卓Android源码——Chalmers.zip”这一主题,深入探讨Android系统的内核、框架层以及应用层的源码,揭示Chalmers项目的精髓。 一、Android系统结构概览 Android系统主要由四个层次组成:Linux...
"安卓Android源码——一键锁屏功能源码.rar" 是一个压缩包,包含了一个实现一键锁屏功能的示例代码。这个资源可能对那些想要学习如何在Android系统上快速实现设备锁定功能的开发者特别有用。下面我们将详细探讨这一...
本资源“安卓Android源码——软件管理器.zip”包含的可能是一份关于安卓软件管理器的源代码实现,这为我们深入理解Android系统的内部工作原理提供了宝贵的资料。 软件管理器,通常被称为应用管理器或App Manager,...
"安卓Android源码——获取系统程序信息.zip"这个压缩包很可能包含了用于解析和显示系统中安装的应用程序信息的相关代码。下面,我们将深入探讨这一主题,围绕Android源码、系统程序信息的获取以及可能涉及的技术细节...
框架层是连接底层系统服务与上层应用的桥梁,包含了ActivityManager、ContentProvider、BroadcastReceiver、Intent、Service等关键组件。开发者可以通过分析源码,了解这些组件的工作原理,优化应用性能。 2. **...
本压缩包文件“安卓Android源码——完全退出程序的方法.zip”可能包含了一个示例代码,展示了如何实现这一功能。下面我们将详细探讨在Android中完全退出程序的方法。 首先,理解Android的应用程序生命周期至关重要...
这份“安卓Android源码——任务管理器源码.zip”包含的文件将帮助我们深入理解Android系统内部的任务调度机制。我们将探讨以下几个关键知识点: 1. **任务与活动(Tasks and Activities)**: 在Android中,任务是...
应用程序框架是 Android Framework 的核心组成部分,它提供了一种基于组件的架构来开发 Android 应用程序。应用程序框架包括了 ActivityManager、PackageManager、 WindowManager 等组件,这些组件提供了一些基本的...
这个压缩包文件"Android源码——仿Siri的中文语音助理源码.zip"包含了实现这一功能所需的全部源代码,旨在帮助开发者理解和构建自己的智能语音助手应用。下面我们将详细探讨其中涉及的关键知识点。 首先,语音识别...
这个压缩包文件“安卓Android源码——强行结束APP进程的方法.zip”可能包含了一些实现这一功能的代码示例和解释。 首先,我们需要理解安卓系统的进程管理机制。Android系统通过ActivityManagerService(AMS)来管理...
本文详细解析了Android中`ActivityManager`框架的功能、接口以及其实现机制。通过理解这些关键概念和技术细节,开发者能够更好地掌握如何管理和监控应用程序的生命周期,进而优化应用性能,提升用户体验。
在安卓(Android)系统中,开发应用程序时,处理返回键以退出程序是常见的需求。本文将深入探讨两种主要的方法,帮助开发者理解并实现这一功能。 首先,我们要知道,Android应用程序通常由多个活动(Activity)组成...
在Android系统中,ActivityManager是核心服务之一,它负责管理应用程序的生命周期,包括启动、暂停、恢复、销毁等操作。这篇博客"android api code学习之ActivityManager"可能深入解析了ActivityManager的工作原理...