Processus système qui gère l'état d'exécution de l'activité et des composants - ActivityManagerService

Processus de démarrage d'AMS

AMS est un processus système fourni par Android pour gérer l'état d'exécution de l'activité et d'autres composants. Il s'agit du service système le plus fréquemment utilisé pour écrire des apk. Il est SystemServerdémarré et enregistré en même temps ServiceManager. Lui et WMS sont tous deux des serveurs de reliures de « vrai nom ».

Comme WMS, AMS est également hébergé en systemServer. Il créera un fil de discussion lorsque le système commencera à traiter les demandes des clients en boucle. Il convient de mentionner qu'AMS enregistrera ServiceManagerune variété de Binder Serverservices tels que "activité", "meminfo", "cpuinfo", etc. - mais seule la première "activité" constitue l'"activité principale" d'AMS et est mise en œuvre parActivity ManagerService : fonctions des services restants Il est fourni par d'autres classes.

Jetons d’abord un coup d’œil au processus de démarrage d’AMS. Comme suit:

 /*frameworks/base/services/java/com/android/server/SystemServer.java*/
    public void run(){ 
        ...
        Slog.i(TAG, "Activity Manager");
        context = ActivityManagerService.main(factoryTest); //启动AMS
        ...
        ActivityManagerService.setSystemProcess(); //向ServiceManager注册AMS
    }

ActivityManagerService fournit une fonction principale statique grâce à laquelle AMS peut être facilement démarré. Ensuite, vous devez appeler setSystemProcess pour enregistrer ce service système important auprès de ServiceManager. On peut voir que comme WMS, il s'agit d'un serveur Binder "de son vrai nom" :

    /*frameworks/base/services/java/com/android/server/am/ActivityManagerService.java*/
    public static final Context main(int factoryTest) {
        AThread thr = new AThread(); //创建AMS线程
        thr.start(); //启动AMS线程
        synchronized (thr) {
            while (thr.mService == null) {
                /*注意,这段代码是运行在SystemServer所在线程中的。
                所以通过mService是否为空来判断AMS成功启动与否:如果是的话就可以返回SystemServer 继续执行,否则就一直等待。
                Android在处理“系统级进程”出错时的普遍态度是“既然系统都出错 了,任何补救都是无力回天的”,所以它的异常处理部分经常是空的
                 */
                try {
                    thr.wait();
                } catch (InterruptedException e) {
                }
            }
        }
        m.mMainStack=new ActivityStack(m,context,true); //创建一个ActivityStack对象,这是AMS的核心,很多工作都是围绕它展开的
        ...
        return context;
    }

Pour le thread où se trouve SystemServer, il doit attendre que AThread (la variable thr mentionnée ci-dessus) soit démarré avec succès avant de pouvoir continuer à s'exécuter. Donc, après thr.start(), attendez thr.wait(). Alors, quand est-ce que tu te réveilles ? La réponse se trouve dans AThread :

 public void run() {
        synchronized (this) {
            mService = m;
            mLooper = Looper.myLooper();
            notifyAll();
        }
    }

Le notifyAll ci-dessus réveillera toutes les cibles de la file d'attente où se trouve l'objet thr, qui inclut naturellement le thread auquel appartient SystemServer. La raison en est que le fonctionnement ultérieur de SystemServer dépendra d'AMS, donc si vous revenez imprudemment alors qu'AMS n'est pas prêt, cela entraînera probablement un temps d'arrêt du système.
L'enregistrement d'AMS sur ServiceManager est très simple. La seule chose à noter est qu'il enregistre non seulement son propre serveur, mais aussi une série de services liés à la gestion des processus. Comme suit:

    public static void setSystemProcess() {
        try {
            ActivityManagerService m = mSelf;
            ServiceManager.addService("activity", m, true);//AMS的主业ServiceManager.addService("meminfo", new
            MemBinder(m));//内存使用情况…//其他服务省略
        }
    }

classe de base

ActivityStack et ActivityTask, ActivityStack est l'enregistreur et le gestionnaire d'activité, et fournit également la base à AMS pour gérer le fonctionnement du système. Lors de la création d'un thread AMS, un ActivityStack est créé ; ActivityTask est un excellent outil dans les applications Android.

Analyse de lecture du code source Android AMS (1)

Analyse et lecture du code source Android AMS (2)

Analyse et lecture du code source Android AMS (3)

Je suppose que tu aimes

Origine blog.csdn.net/jxq1994/article/details/132631200
conseillé
Classement