ActivityManagerService boot up sequence analysis,

來源:互聯網
上載者:User

ActivityManagerService boot up sequence analysis,
ActivityManagerService (AMS) 是android系統中最核心的服務,主要負責四大組件的啟動,切換,調度及應用程式的管理和調度等工作,其職責與作業系統中的進程管理和調度模組類似。

以system server中ActivityManagerService的調用軌跡分為以下四個部分:

Part 1: AMS.main
Part 2: AMS.setSystemProcess

Part 3: AMS.installSystemProviders

Part 4: AMS.self().systemReady

啟動流程介紹 1


 次圖片轉載自網路,特別說明

啟動流程介紹2 

  Part 1: AMS Main Function

  1. 建立了 AMS對象
2. 建立一個ActivityThread 對象,它代表一個應用進程的
    主線程
3. 獲得一個context對象,它對應的application環境與
     framework-res.apk有關;

通過此函數,為system_server 進程搭建了一個和應用進程一樣的android運行環境

Part 1-1:Create AMS object



Part 1-2:Create ActivityThread & context 



Part 1-2:Create ActivityThread & Context 



Part 1-2:Create ActivityThread & Context 


Part 1-3:Create ActivityStack


Part 2:setSystemProcess


1. 將ActivityManagerService, meminfo,gfxinfo等以下服務註冊到ServiceManager


            ServiceManager.addService("activity", m, true);
            ServiceManager.addService("meminfo", new MemBinder(m));
            ServiceManager.addService("gfxinfo", new GraphicsBinder(m));
            ServiceManager.addService("dbinfo", new DbBinder(m));
            ServiceManager.addService("cpuinfo", new CpuBinder(m));
            ServiceManager.addService("permission", new PermissionController(m));




2.   通過PKMS 查詢關於 framework-res.apk的ApplicationInfo,並用此初始化anroid運行環境 
       //向PKMS查詢package名字為“android”的ApplicationInfo。PKMS 與AMS同一個進程,
          但通過android運行環境context(AMS->binder->PKMS)來實現,
         保證介面統一性及可擴充性
         ApplicationInfo info = mSelf.mContext.getPackageManager().getApplicationInfo(
                            "android", STOCK_PM_FLAGS);


         //對context進行二次初始化,與得到的applicatoninfo進行綁定。
            mSystemThread.installSystemApplicationInfo(info);


 3.  建立代表 system_server進程的管理結構ProcessRecord,並將systemserver進程併入
      AMS管理
               ProcessRecord app = mSelf.newProcessRecordLocked(
               mSystemThread.getApplicationThread(), info,
               info.processName, false); 建立processrecord,包含電量統計,應用資訊,
               進程名(system),oom_adj,IApplicationThread和應用進程通訊等資訊。


                app.persistent = true;(常駐進程)
                app.pid = MY_PID;  system_server的進程號
                app.maxAdj = ProcessList.SYSTEM_ADJ;(-16)最高優先順序


                AMS中用於儲存管理 processRecord的兩個成員變數結構。
                mSelf.mProcessNames.put(app.processName, app.uid, app);
                mSelf.mPidsSelfLocked.put(app.pid, app);
                根據系統目前狀態,調整進程調度優先順序和OOM_ADJ.
                mSelf.updateLruProcessLocked(app, true);

  Part 3:installSystemProviders

SettingsProvider.apk 包含SettingsProvider,放在system_serever中運行方便為各個service提供配置資訊查詢 



  


1 android程式中,一般建立的資料庫存放在 /data/data/[應用程式套件組合名]/databases 
的目錄下
2. 通過URI 進行操作,例如content://contacts/people/1  指定ID為1 連絡人的資料
3. 相關操作涉及 query, insert,update ,delete 等操作






聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.