Android源碼分析(十三)ActivityManagerService服務分析

來源:互聯網
上載者:User

標籤:monit   creation   battery   ide   www   截取   系統資料   info   using   

一.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);    }

   從上面截取的一些程式碼片段,我們能瞭解到, AMS建立過程 涉及到Android 四大組件管理的初始化工作。並且ActivityManagerService extends IActivityManager.Stub,所以可知AcitivityManagerService與AcitivityManager之間通訊也是使用binder機制。

    進ActivityManager 裡面看看

//與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

Android源碼分析(十三)ActivityManagerService服務分析

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.