activity令牌token

原创 2018年04月16日 21:44:10

1、概述

    activity的启动过程中涉及到Android framework中的很多个层次,如活动管理者、窗口管理者、客户端应用APP。它们之间是如何实现一一对应的?
这里写图片描述

2、Token创建:

    activity启动过程会去创建ActivityRecord对象记录该活动的信息,在执行构造函数就会去创建令牌Token
–>ActivityRecord.java

ActivityRecord(){
   appToken = new Token(this, service);
}

3、Token传递到WMS过程:

    当ActivityRecord创建好后,就会作为参数,去start该活动。该过程会将令牌token传递给WMS(窗口管理者)
–>ActivityStack.java

final void startActivityLocked(ActivityRecord r, boolean newTask,
                               boolean doResume, boolean keepCurTransition, Bundle options) {
......
     mWindowManager.addAppToken(task.mActivities.indexOf(r), r.appToken,
        r.task.taskId, mStackId, r.info.screenOrientation, r.fullscreen,
        (r.info.flags & ActivityInfo.FLAG_SHOW_FOR_ALL_USERS) != 0, r.userId,
        r.info.configChanges, task.voiceSession != null, r.mLaunchTaskBehind);
......
}

    WMS(窗口管理者)会根据参数token,去创建对象AppWindowToken,并将AppWindowToken放入mTokenMap容器记录下来。当后面要addWindow时,就可以遍历mTokenMap,看是否存在对应的令牌token。
–>WindowManagerService.java

public void addAppToken(int addPos, IApplicationToken token...){
......
atoken = new AppWindowToken(this, token, voiceInteraction);
atoken.inputDispatchingTimeoutNanos = inputDispatchingTimeoutNanos;
atoken.appFullscreen = fullscreen;
atoken.showForAllUsers = showForAllUsers;
atoken.requestedOrientation = requestedOrientation;
atoken.layoutConfigChanges = (configChanges &
        (ActivityInfo.CONFIG_SCREEN_SIZE | ActivityInfo.CONFIG_ORIENTATION)) != 0;
atoken.mLaunchTaskBehind = launchTaskBehind;
if (DEBUG_TOKEN_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(TAG, "addAppToken: " + atoken
        + " to stack=" + stackId + " task=" + taskId + " at " + addPos);

Task task = mTaskIdToTask.get(taskId);
if (task == null) {
    task = createTaskLocked(taskId, stackId, userId, atoken);
}
task.addAppToken(addPos, atoken);

mTokenMap.put(token.asBinder(), atoken);
......
}

3、Token传递到应用客户端过程:

    当AMS、WMS准备好后,就会通过scheduleLaunchActivity去发送消息,进行回调客户端执行activity生命周期的oncreate方法。此时会将activity的令牌r.appToken作为参数传递到客户端。
–>ActivityStackSupervisor.java

final boolean realStartActivityLocked(.....) {
......
app.thread.scheduleLaunchActivity(new Intent(r.intent), r.appToken,
        System.identityHashCode(r), r.info, new Configuration(mService.mConfiguration),
        new Configuration(stack.mOverrideConfig), r.compat, r.launchedFromPackage,
        task.voiceInteractor, app.repProcState, r.icicle, r.persistentState, results,
        newIntents, !andResume, mService.isNextTransitionForward(), profilerInfo);
......
}

    客户端scheduleLaunchActivity方法实现如下:

public final void scheduleLaunchActivity(Intent intent, IBinder token, int ident,
        ActivityInfo info, Configuration curConfig, Configuration overrideConfig,
        CompatibilityInfo compatInfo, String referrer, IVoiceInteractor voiceInteractor,
        int procState, Bundle state, PersistableBundle persistentState,
        List<ResultInfo> pendingResults, List<ReferrerIntent> pendingNewIntents,
        boolean notResumed, boolean isForward, ProfilerInfo profilerInfo) {
    updateProcessState(procState, false);

    ActivityClientRecord r = new ActivityClientRecord();

    r.token = token;
......
    sendMessage(H.LAUNCH_ACTIVITY, r);//发送信息执行oncreate方法
}

4、总结

    通过以上分析,可以清楚地看出客户端、AMS、WMS分别只有activity的令牌token。通过令牌token,就可以确保activity在不同层次都可以保持一一对应的关系。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/marshal_zsx/article/details/79967146

关于struts令牌机制(Token)

关于struts令牌机制Struts的Token(令牌)机制能够很好的解决表单重复提交的问题,基本原理是:服务器端在处理到达的请求之前,会将请求中包含的令牌值与保存在当前用户会话中的令牌值进行比较,看...
  • wym19830218
  • wym19830218
  • 2010年03月01日 17:06
  • 869

java微信开发的服务器(令牌)token

微信开发的第一步,服务器配置问题,我用的springMVC,不多说,图下边直接上代码。 import java.io.IOException; import java.io.P...
  • qq_33376750
  • qq_33376750
  • 2017年08月10日 10:28
  • 334

登录令牌 Token 介绍

登录令牌 Token 介绍  Token值介绍 token 值: 登录令牌.利用 token 值来判断用户的登录状态.类似于 MD5 加密之后的长字符串.用户登录成功之后,在后端(服务器端...
  • resilient
  • resilient
  • 2017年05月24日 09:24
  • 1217

什么是用户token(令牌)-- 转

在目前的互联网或者计算机网络技术中,经常会听到token或者“令牌”这个词。那有没有想过,token或者说令牌到底是什么东西,有什么作用,为什么token的中文翻译是“令牌”?其实这个问题也困扰了我很...
  • u014328357
  • u014328357
  • 2017年07月05日 12:10
  • 528

登录令牌Token介绍

登录令牌 Token 介绍
  • ZHFDBK
  • ZHFDBK
  • 2017年08月21日 15:46
  • 515

android中的token

token顾命思意,象征符号,到底是什么的象征呢?我们在看andorid源码的时候,经常会碰到程序与系统service之间的通信,我们也知道进程间通信会用binder机制! 而这个token就是一...
  • congqingbin
  • congqingbin
  • 2016年05月15日 22:30
  • 3051

qos令牌桶(Token Bucket)算法解析

QoS中的流量监管(Traffic Policing)就是对流量进行控制,通过监督进入网络端口的流量速率,对超出部分的流量进行“惩罚”(这个惩罚可以是丢弃、也可是延迟发送),使进入端口的流量被限制在一...
  • YEYUANGEN
  • YEYUANGEN
  • 2014年03月05日 10:55
  • 7018

ThinkPHP自动令牌验证(附实例)

自动令牌会向当前SESSION会话当中放上一个md5加密的字符串。并将这个字符串以隐藏域的形式插入到表单的form之前。这个字符串出现在两个地方,一个是在SESSION当中,另一个就是在表单当中。当你...
  • koothon
  • koothon
  • 2015年04月17日 12:17
  • 1780

我对servlet+jsp当中使用token令牌避免用户重复提交表单的见解

首先我认为,要想从根本上避免用户重复提交表单,就一定要采用token令牌。使用js脚本在一定程度上能避免此类事情发生,但我认为这样做有缺陷。首先,利用js代码避免用户二次提交表单,在某些特殊情况下并不...
  • qq_35051536
  • qq_35051536
  • 2017年08月27日 20:57
  • 284

dubbo 令牌验证 源码分析

在ServiceConfig.java中在doExportUrlsFor1Protocol中: if (! ConfigUtils.isEmpty(token)) {//如果配置令牌...
  • CHS007chs
  • CHS007chs
  • 2017年08月03日 16:25
  • 967
收藏助手
不良信息举报
您举报文章:activity令牌token
举报原因:
原因补充:

(最多只允许输入30个字)