Android ActivityManagerService

一、ActivityManagerService介绍

ActivityManager是一个系统级别的管理者,主要负责管理和监控所有正在运行的组件(包括Activity、Service、BroadcastReceiver等),并为应用程序提供一些基本的系统服务。它负责调度资源、管理进程、监控应用程序的状态等工作,被视为Android系统中最重要的服务之一。

而ActivityManagerService则是ActivityManager的实现者,也就是说ActivityManagerService是ActivityManager的底层服务接口,在系统中充当了ActivityManager的核心模块。

ActivityManagerService通过Binder机制与ActivityManager进行通信,提供对系统中其它组件的管理和监控功能。

二、ActivityManagerService相关的类和接口

core/java/android/app

IActivityManager

用于与活动管理器服务通信的系统专用 API。 这将提供从应用程序返回到活动管理器的调用。

IActivityManager文件路径:

frameworks/base/core/java/android/app/IActivityManager.aidl

IActivityManager定义:

interface IActivityManager {}

IActivityTaskManager

系统专用 API,用于与活动任务管理器通信,该任务管理器处理如何在屏幕上管理活动。

IActivityTaskManager文件路径:

frameworks/base/core/java/android/app/IActivityTaskManager.aidl

IActivityTaskManager定义:

interface IActivityTaskManager {}

IServiceConnection

IServiceConnection是Android中的一个接口,用于管理应用程序组件与服务之间的连接。

IServiceConnection文件路径:

frameworks/base/core/java/android/app/IServiceConnection.aidl

IServiceConnection定义:

oneway interface IServiceConnection {}

IServiceConnection方法:

void connected(in ComponentName name, IBinder service, boolean dead);

ActivityManager

ActivityManager是Android系统中的一个重要组件,用于管理和控制应用程序的活动(Activity)。它负责启动、停止、暂停、恢复和销毁活动,并且跟踪应用程序的生命周期。

ActivityManager文件路径:

frameworks/base/core/java/android/app/ActivityManager.java

ActivityManager定义:

public class ActivityManager {}

ActivityTaskManager

ActivityTaskManager是Android系统中的一个关键组件,它负责管理应用程序的Activity生命周期和任务栈。ActivityTaskManager提供了一系列方法,用于启动、停止、切换和管理应用程序的Activity。

ActivityTaskManager是一个系统服务,可以通过获取其代理对象IActivityTaskManager来进行跨进程操作。在引用中,通过调用ActivityTaskManager.getService()方法获取了IActivityTaskManager代理对象,然后可以使用该代理对象调用ActivityTaskManagerService的方法,实现对ActivityManagerService的调用。

在引用中,通过调用ActivityManager.getService()方法可以直接获取对ActivityManagerService的调用。ActivityManager封装了对ActivityManagerService的调用,提供了一些方便的方法来管理应用程序的Activity。

ActivityTaskManager文件路径:

frameworks/base/core/java/android/app/ActivityTaskManager.java

ActivityTaskManager定义:

public class ActivityTaskManager {}

service/core/java/com/android/server/am

ActivityManagerService

ActivityManagerService是Android系统中的一个重要组件,它负责管理应用程序的生命周期和任务栈,以及处理应用程序之间的交互。它是Android系统的核心服务之一,负责监控和控制应用程序的运行状态。

ActivityManagerService文件路径:

frameworks/base/service/core/java/com/android/server/am/ActivityManagerService.java

ActivityManagerService定义:

public class ActivityManagerService extends IActivityManager.Stub
        implements Watchdog.Monitor, BatteryStatsImpl.BatteryCallback, ActivityManagerGlobalLock {
    private final class PackageAssociationInfo {}
    static final class PidMap {}
    abstract class ImportanceToken implements IBinder.DeathRecipient {}
    final static class Association {}
    static final class PendingTempAllowlist {}
    public static final class FgsTempAllowListItem {}
    static final class ProcessChangeItem {}
    private final class AppDeathRecipient implements IBinder.DeathRecipient {}
    final class UiHandler extends Handler {}
    final class MainHandler extends Handler {}
    static class MemBinder extends Binder {}
    static class GraphicsBinder extends Binder {}
    static class DbBinder extends Binder {}
    static class CacheBinder extends Binder {}
    public static final class Lifecycle extends SystemService {}
    static class HiddenApiSettings extends ContentObserver implements DeviceConfig.OnPropertiesChangedListener {}
    static class SdkSandboxSettings implements DeviceConfig.OnPropertiesChangedListener {}
    static class PermissionController extends IPermissionController.Stub {}
    class IntentFirewallInterface implements IntentFirewall.AMSInterface {}
    public static class ItemMatcher {}
    final static class MemItem {}
    private static class MemoryUsageDumpOptions {}
    static final class ProcStatsRunnable implements Runnable {}
    public final class LocalService extends ActivityManagerInternal implements ActivityManagerLocal {}
    public static class Injector {}
    private class ShellDelegate implements CheckOpsDelegate {}
}

ActivityManagerService方法:

public List<ActivityManager.RunningServiceInfo> getServices(int maxNum, int flags)
public ComponentName startService(IApplicationThread caller, Intent service, String resolvedType, boolean requireForeground, String callingPackage, String callingFeatureId, int userId)
public int stopService(IApplicationThread caller, Intent service, String resolvedType, int userId) 
public IBinder peekService(Intent service, String resolvedType, String callingPackage)
public boolean stopServiceToken(ComponentName className, IBinder token, int startId)
public void setServiceForeground(ComponentName className, IBinder token, int id, Notification notification, int flags, int foregroundServiceType)  
public int getForegroundServiceType(ComponentName className, IBinder token) 
public int bindService(IApplicationThread caller, IBinder token, Intent service, String resolvedType, IServiceConnection connection, int flags, String callingPackage, int userId) 
public int bindServiceInstance(IApplicationThread caller, IBinder token, Intent service, String resolvedType, IServiceConnection connection, int flags, String instanceName, String callingPackage, int userId) 
public boolean unbindService(IServiceConnection connection)
public void updateServiceGroup(IServiceConnection connection, int group, int importance)
public void publishService(IBinder token, Intent intent, IBinder service)
public void unbindFinished(IBinder token, Intent intent, boolean doRebind)
public void serviceDoneExecuting(IBinder token, int type, int startId, int res)
public boolean bindBackupAgent(String packageName, int backupMode, int targetUserId, @OperationType int operationType) 
public void backupAgentCreated(String agentPackageName, IBinder agent, int userId)
public void unbindBackupAgent(ApplicationInfo appInfo)
public final int broadcastIntentWithFeature(IApplicationThread caller, String callingFeatureId, Intent intent, String resolvedType, IIntentReceiver resultTo, int resultCode, String resultData, Bundle resultExtras, String[] requiredPermissions, String[] excludedPermissions, String[] excludedPackages, int appOp, Bundle bOptions, boolean serialized, boolean sticky, int userId) 
public final void unbroadcastIntent(IApplicationThread caller, Intent intent, int userId) 
public void finishReceiver(IBinder who, int resultCode, String resultData, Bundle resultExtras, boolean resultAbort, int flags)
public boolean startInstrumentation(ComponentName className, String profileFile, int flags, Bundle arguments, IInstrumentationWatcher watcher, IUiAutomationConnection uiAutomationConnection, int userId, String abiOverride)

ActiveServices

ActiveServices是Android系统中的一个重要组件,负责管理和调度应用程序的服务。它负责启动、停止和管理应用程序的后台服务,并确保它们按照正确的顺序和优先级执行。

ActiveServices的主要功能包括:

  1. 启动服务:ActiveServices负责启动应用程序的服务。它会根据应用程序的请求,调用相应的服务组件的onCreate()方法来创建服务实例,并将其添加到服务列表中进行管理。

  2. 停止服务:ActiveServices也负责停止应用程序的服务。当应用程序调用stopService()方法停止服务时,ActiveServices会调用相应服务组件的onDestroy()方法来销毁服务实例,并从服务列表中移除。

  3. 服务调度:ActiveServices会根据服务的优先级和调用顺序来调度服务的执行。它会根据应用程序的需求和系统资源的可用性,决定哪些服务应该被启动、停止或保持运行。

  4. 服务超时:ActiveServices还负责监控服务的执行时间,并在服务执行超时时进行处理。它会根据一定的策略来判断服务是否超时,并采取相应的措施,如停止服务或触发超时处理机制。

ActiveServices文件路径:

frameworks/base/service/core/java/com/android/server/am/ActiveServices.java

ActiveServices定义:

public final class ActiveServices {
    static final class ActiveForegroundApp {}
    final class ServiceMap extends Handler {}
    private static final class AppOpCallback {}
    final class ServiceDumper {}
}

ProcessRecord

ProcessRecord类用于管理应用检测的进程信息和状态,ProcessRecord和进程之前是一对一的关系,每个进程都会对应一个ProcessRecord。ProcessRecord的作用:

1、保存应用程序的进程信息,如果进程名、UID、进程状态等。

2、监控应用程序的状态,如启动、停止、重启等。

3、分配进程的内存控件和CPU时间片,以实现多任务并发执行。

4、实现应用程序的进程保护,防止出现OOM等异常情况。

5、提供应用程序的进程管理功能,如杀死进程、清除缓存等。

ProcessRecord中重要的成员变量:

uid:应用程序运行的用户标识符。

pid:进程的进程标识符。

packageName:进程的应用程序包名称。

processName:进程的名称

hostingRecord:进程的HostingRecord对象,其中包含进程相关信息。

startTime:进程的启动时间。

lastActivityTime:进程的最后一次活动时间。

lastTopTime:最后一次活动在顶部的时间。

lastProviderTime:最后一次活动作为Provider的时间。

lastServiceTime:最后一次活动作为Service的时间。

lruSeq:LruSeq序列号,用来评估进程的最近使用情况,以便后续的废弃进程清理工作。

hasShowUi:是否已经显示过UI。

notResponding:进程是否未响应。

persistent:进程是否是持久化的。

pidLruSeq:持久化过程LruSeq序列号。

pidLruMaintenanceSequence:持久化过程Lru缓存序列号。

pubProviders:公公共提供者。

connections:与进程相关的所有ActivityServiceConnections。

service:进程中的所有服务。

ProcessRecord文件路径:

frameworks/base/service/core/java/com/android/server/am/ProcessRecord.java

ProcessRecord定义:

class ProcessRecord implements WindowProcessListener {}

AppBindRecord

An association between a service and one of its client applications.

服务与其客户端应用程序之一之间的关联。

AppBindRecord文件路径:

frameworks/base/service/core/java/com/android/server/am/AppBindRecord.java

AppBindRecord定义:

final class AppBindRecord {}

ConnectionRecord

Description of a single binding to a service.

与服务的单个绑定的说明。

ConnectionRecord文件路径:

frameworks/base/service/core/java/com/android/server/am/ConnectionRecord.java

ConnectionRecord定义:

final class ConnectionRecord {}

BroadcastRecord

An active intent broadcast.

活动意图广播。

BroadcastRecord文件路径:

frameworks/base/service/core/java/com/android/server/am/BroadcastRecord.java

BroadcastRecord定义:

final class BroadcastRecord extends Binder {}

BroadcastQueue

我们保留了三个广播队列和相关的簿记,一个用于前台优先级的广播,一个用于正常(后台优先级)广播,另一个用于卸载我们知道需要很长时间的特殊广播,例如BOOT_COMPLETED。

BroadcastQueue文件路径:

frameworks/base/service/core/java/com/android/server/am/BroadcastQueue.java

BroadcastQueue定义:

public final class BroadcastQueue {}

BroadcastDispatcher

Manages ordered broadcast delivery, applying policy to mitigate the effects of slow receivers.

管理有序广播传送,应用策略来减轻慢速接收器的影响。

BroadcastDispatcher文件路径:

frameworks/base/service/core/java/com/android/server/am/BroadcastDispatcher.java

BroadcastDispatcher定义:

public class BroadcastDispatcher {}

BroadcastFilter

广播过滤器

BroadcastFilter文件路径:

frameworks/base/service/core/java/com/android/server/am/BroadcastFilter.java

BroadcastFilter定义:

final class BroadcastFilter extends IntentFilter {}

ReceiverList

已注册一个或多个广播的接收方对象。ArrayList 包含 BroadcastFilter 对象。

ReceiverList文件路径:

frameworks/base/service/core/java/com/android/server/am/ReceiverList.java

ReceiverList定义:

final class ReceiverList extends ArrayList<BroadcastFilter> implements IBinder.DeathRecipient {}

ProcessList

Activity manager code dealing with processes.

处理进程的活动管理器代码。

ProcessList文件路径:

frameworks/base/service/core/java/com/android/server/am/ProcessList.java

ProcessList定义:

public final class ProcessList {}

ProcessList方法:

boolean startProcessLocked(ProcessRecord app, HostingRecord hostingRecord, int zygotePolicyFlags, boolean disableHiddenApiChecks, boolean disableTestApiChecks, String abiOverride) :return {@code true} if process start is successful, false otherwise.
boolean startProcessLocked(HostingRecord hostingRecord, String entryPoint, ProcessRecord app, int uid, int[] gids, int runtimeFlags, int zygotePolicyFlags, int mountExternal, String seInfo, String requiredAbi, String instructionSet, String invokeWith, long startUptime, long startElapsedTime) 
private void handleProcessStart(final ProcessRecord app, final String entryPoint, final int[] gids, final int runtimeFlags, int zygotePolicyFlags, final int mountExternal, final String requiredAbi, final String instructionSet, final String invokeWith, final long startSeq):Main handler routine to start the given process from the ProcStartHandler.
private Process.ProcessStartResult startProcess(HostingRecord hostingRecord, String entryPoint, ProcessRecord app, int uid, int[] gids, int runtimeFlags, int zygotePolicyFlags, int mountExternal, String seInfo, String requiredAbi, String instructionSet, String invokeWith, long startTime)

PendingIntentController

Helper class for {@link ActivityManagerService} responsible for managing pending intents.

ActivityManagerService的帮助程序类,负责管理待处理的意图。

PendingIntentController文件路径:

frameworks/base/service/core/java/com/android/server/am/PendingIntentController.java

PendingIntentController定义:

public class PendingIntentController {}

AppProfiler

A helper class taking care of the profiling, memory and cpu sampling of apps

一个帮助程序类,负责应用的分析、内存和 cpu 采样

AppProfiler文件路径:

frameworks/base/service/core/java/com/android/server/am/AppProfiler.java

AppProfiler定义:

public class AppProfiler {
    private class BgHandler extends Handler {}
    private final class RecordPssRunnable implements Runnable {}
    private class ProcessCpuThread extends Thread {}
    class CpuBinder extends Binder {}
}

三、ActivityManagerService相关流程分析

ActivityManagerService 启动流程分析

Android13 ActivityManagerService 启动流程分析-CSDN博客

ActivityManagerService startService流程分析

Android13 ActivityManagerService startService流程分析-CSDN博客

ActivityManagerService startProcessLocked流程分析

Android13 ActivityManagerService startProcessLocked流程分析-CSDN博客

ActivityManagerService bindServiceInstance流程分析

Android13 ActivityManagerService bindServiceInstance流程分析-CSDN博客

ActivityManagerService unbindService流程分析

Android13 ActivityManagerService unbindService流程分析-CSDN博客

ActivityManagerService stopServiceToken流程分析

Android13 ActivityManagerService stopService流程分析-CSDN博客

ActivityManagerService broadcastIntentWithFeature流程分析

Android13 ActivityManagerService broadcastIntentWithFeature流程分析-CSDN博客

ActivityManagerService registerReceiverWithFeature流程分析

Android13 ActivityManagerService registerReceiverWithFeature流程分析-CSDN博客

  • 27
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值