Android源码分析(十三)ActivityManagerService服务分析

匿名 (未验证) 提交于 2019-12-03 00:43:02

一.ActivityManagerService(AMS) 启动过程分析

在SystemServer启动ActivityManagerService

如果想了解SystemServer启动过程可以看这篇文章:Android 源码分析(六) SystemServer 进程

frameworks\base\services\java\com\android\server\SystemServer.java         // Activity manager runs the show.         traceBeginAndSlog("StartActivityManager");         mActivityManagerService = mSystemServiceManager.startService(                 ActivityManagerService.Lifecycle.class).getService();         mActivityManagerService.setSystemServiceManager(mSystemServiceManager);         mActivityManagerService.setInstaller(installer);         

frameworks\base\services\core\java\com\android\server\am\ActivityManagerService.java

public class ActivityManagerService extends IActivityManager.Stub         implements Watchdog.Monitor, BatteryStatsImpl.BatteryCallback {      /** All system services */     SystemServiceManager mSystemServiceManager;          /** Run all ActivityStacks through this */     //管理Activity     final ActivityStackSupervisor mStackSupervisor;          final ActivityStarter mActivityStarter;          final TaskChangeNotificationController mTaskChangeNotificationController;      final InstrumentationReporter mInstrumentationReporter = new InstrumentationReporter();      final ArrayList<ActiveInstrumentation> mActiveInstrumentation = new ArrayList<>();          // Whether we should use SCHED_FIFO for UI and RenderThreads.     private boolean mUseFifoUiScheduling = false;       //Broadcast 广播 ,前台广播队列和后台广播队列     BroadcastQueue mFgBroadcastQueue;     BroadcastQueue mBgBroadcastQueue;          // Convenient for easy iteration over the queues. Foreground is first     // so that dispatch of foreground broadcasts gets precedence.     final BroadcastQueue[] mBroadcastQueues = new BroadcastQueue[2];      BroadcastStats mLastBroadcastStats;     BroadcastStats mCurBroadcastStats;      BroadcastQueue broadcastQueueForIntent(Intent intent) {         final boolean isFg = (intent.getFlags() & Intent.FLAG_RECEIVER_FOREGROUND) != 0;         if (DEBUG_BROADCAST_BACKGROUND) Slog.i(TAG_BROADCAST,                 "Broadcast intent " + intent + " on "                 + (isFg ? "foreground" : "background") + " queue");         return (isFg) ? mFgBroadcastQueue : mBgBroadcastQueue;     }      //Activity 堆栈     /**      * The last resumed activity. This is identical to the current resumed activity most      * of the time but could be different when we‘re pausing one activity before we resume      * another activity.      */     private ActivityRecord mLastResumedActivity;      /**      * If non-null, we are tracking the time the user spends in the currently focused app.      */     private AppTimeTracker mCurAppTimeTracker;          //ANR ? 最后个ANR状态,难道可以记录app发生ANR的?     /**      * Dump of the activity state at the time of the last ANR. Cleared after      * {@link WindowManagerService#LAST_ANR_LIFETIME_DURATION_MSECS}      */     String mLastANRState;          //Service 和 Provider 管理     final ActiveServices mServices;     final ProviderMap mProviderMap;          //存放系统数据目录     // TODO: Move creation of battery stats service outside of activity manager service.     File dataDir = Environment.getDataDirectory();     File systemDir = new File(dataDir, "system");     systemDir.mkdirs();     mBatteryStatsService = new BatteryStatsService(systemDir, mHandler);      //应用权限管理     mAppOpsService = mInjector.getAppOpsService(new File(systemDir, "appops.xml"), mHandler);              //AcitivityManager 添加进来         ServiceManager.addService(Context.ACTIVITY_SERVICE, this, true);                 ServiceManager.addService(ProcessStats.SERVICE_NAME, mProcessStats);                 ServiceManager.addService("meminfo", new MemBinder(this));                 ServiceManager.addService("gfxinfo", new GraphicsBinder(this));                 ServiceManager.addService("dbinfo", new DbBinder(this));                 if (MONITOR_CPU_USAGE) {                     ServiceManager.addService("cpuinfo", new CpuBinder(this));                 }                 ServiceManager.addService("permission", new PermissionController(this));                 ServiceManager.addService("processinfo", new ProcessInfoService(this));          //最后 使用Watchdog监控     Watchdog.getInstance().addMonitor(this);     Watchdog.getInstance().addThread(mHandler);      }

//与ActivityManagerService里的ServiceManager.addService(Context.ACTIVITY_SERVICE, this, true);对应。 @SystemService(Context.ACTIVITY_SERVICE) public class ActivityManager {     ... }

二.ActivityManager和ActivityManagerService关系

如果想了解Activity是如果通过ActivityManager调用ActivityManagerService的过程可以看下这篇文章.

Android 源码分析(二) Activity 启动分析

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

ActivityManager 是客户端用来管理系统中正在运行的所有Activity.

上层APP通过ActivityManager使用binder机制传递信息给AMS,由AMS去完成交互和调度工作后通过binder机制返回给ActivityManager,把结果在返回给上层app。

一张图了解ActivityManager和ActivityManagerService在整个Android系统通信过程中位置。

参考:
[1]https://www.cnblogs.com/bastard/p/5770573.html

原文:https://www.cnblogs.com/bugzone/p/ActivityManagerService.html

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!