Android framework:wms/ams/activity Token

启动一个Activity的时候,会为Activity创建Token,也就是ActivityRecord中的Token:

startActivityLocked -> 
    ActivityRecord r = new ActivityRecord(..); //生成ActivityRecord实例
    ActivityRecord(
        ...
        appToken = new Token(this, service);
        ...
    }

Token是binder的作用,主要是与ams交互,通知window、事件的消息

WMS中的appToken、appWindowToken(wms管理窗口也是通过窗口栈):

public void addAppToken( ) {
            atoken = new AppWindowToken(this, token, voiceInteraction); 
            Task task = mTaskIdToTask.get(taskId); 

            if (task == null) {
                task = createTaskLocked(taskId, stackId, userId, atoken, taskBounds, config);
            }
            task.addAppToken(addPos, atoken, taskResizeMode, homeTask); 
            mTokenMap.put(token.asBinder(), atoken);
}
AppWindowToken(WindowManagerService _service, IApplicationToken _token,
            boolean _voiceInteraction) {
        super(_service, _token.asBinder(), 
                WindowManager.LayoutParams.TYPE_APPLICATION, true);
        appWindowToken = this; //appWindowToken
        appToken = _token;  //引用到ActivityRecord中的Token
        voiceInteraction = _voiceInteraction;
        mInputApplicationHandle = new InputApplicationHandle(this);
        mAppAnimator = new AppWindowAnimator(this);
    }

 appWindowToken包含appToken,可以binder调用,与应用交互信息

 App中的Token:

public void setWindowManager(WindowManager wm, IBinder appToken, String appName,
            boolean hardwareAccelerated) {
        mAppToken = appToken; 
}

App中的Token就是ActivtyRecord的token

ActivityClientRecord
这个类是Activity在ActivityThread中一一对应的,一个APP有多个Activity, 也就是说有多个ActivityClientRecord, 那么当AMS要启动一个Activity的时候,怎么样找到APP中正确的那个Activity呢?答案就是通过Token

Activity
Activity中Token主要用于在请求AMS服务时用于定位到具体到AMS中正确的ActivityRecord
比如进入PIP模式,通过Token,AMS就可以知道具体是哪个Activity进入PIP

WMS

WMS中的token是通过WindowManager.LayoutParams传过来的,作用之一是作为
mTokensMap中的key值用来储存对应的WindowToken
作用之二是通知AMS一些消息

    原文作者:jianpan_zouni
    原文地址: https://blog.csdn.net/jianpan_zouni/article/details/88304230
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞