ActivityManagerService

system_server进程

system_server进程是zygote进程fork的第一个进程,大量的系统服务运行在这个进程中,常见的如:
ActivityManagerService,WindowManagerService,PackageManagerService等等

AMS相关的静态类结构图

AMS(ActivityManagerService)是贯穿Android系统组件的核心服务,负责了系统中四大组件的启动、切换、调度以及应用进程管理。

在这里插入图片描述

我们做应用开发接触很多的就是ActivityManager类,它提供了我们管理Activity的一些基本的方法:
如下:

  • public void testgetRecentTasks() //获取最近的应用,最后启动的排前
  • public void testgetRunningTasks() //获取当前运行的Activity应用
  • public void testgetRunningServices() //获取当前运行的service应用
  • public void testgetRunningAppProcesses() //获取所用系统运行的进程

而这些操作都依赖于ActivityManagerProxy代理类的实现,IActivitManager接口定义了所有ActivityManager框架的操作,ActivityManagerProxy实现了IActivitManager接口,但并不真正实现这些方法,它只是一个代理类(ActivityManagerProxy是ActivityManagerService在Client端的代理类),真正执行动作的类是ActivityManagerService,ActivityManagerService对象只有一个,并运行在system_server进程中,ActivityManagerService继承于ActivityManagerNative存根类。

结合aidl的实现机制就可以知道,IActivityManager是 IInterface类(aidl接口),ActivityManagerProxy是代理类(Proxy),ActivityManagerNative是存根类(Stub)。只不过这里没有用aidl文件实现,而是直接用java类实现。

ActivityManager存在于用户进程中,操作的真正执行是在system_server进程中的ActivityManagerService,ActivityManager通过ActivityManagerService最终执行各种方法的过程就是进程间通信。

参考:
Android解析ActivityManagerService(一)AMS启动流程和AMS家族

https://www.androidos.net.cn/android/9.0.0_r8/xref/frameworks/base/core/java/android/app/IActivityManager.aidl
https://www.androidos.net.cn/android/7.1.1_r28/xref/frameworks/base/core/java/android/app/IActivityManager.java
https://www.androidos.net.cn/android/9.0.0_r8/xref/frameworks/base/core/java/android/app/ActivityManager.java
https://www.androidos.net.cn/android/9.0.0_r8/xref/frameworks/base/core/java/android/app/ActivityManagerNative.java
https://www.androidos.net.cn/android/9.0.0_r8/xref/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java

发布了535 篇原创文章 · 获赞 94 · 访问量 74万+

猜你喜欢

转载自blog.csdn.net/yzpbright/article/details/104929403