zoukankan      html  css  js  c++  java
  • appToken 来源

    1、appToken的来源
    ActivityRecord, 用于在ActivityManagerService中记录Activity相关的信息(ActivityThread端 用的是ActivityClientRecord),它有个内部静态内Token, 继承IApplicationToken.stub, 看名称可以知道它是一个Binder服务的实现类,而且是用AIDL架构实现的,具体可见frameworksasecorejavaandroidviewIApplicationToken.aidl文件

    2、appToken的创建
    我们在创建ActivityRecord的时候,会创建它,如下:
    appToken = new Token(this), 它持有了ActivityRecord的弱引用。

    通常我们在AMS收到启动新的Activity命令的时候,会在ActivityStackSupervisor->startActivityLocked 中初始化一个 ActivityRecord
    AMS->startActivity()
    AMS->startActivityAsUser()
      ActivityStackSupervisor->startActivityMaywait()
        ActivityStackSupervisor->startActivityLocked(), 这里创建新的ActivityRecord
          ActivityStackSupervisor->startActivityUncheckedLocked
            ActivityStack->resumeTopActivityLocked()
              ActivityStack->resumeTopActivityInnerLocked()
                ActivityStackSupervisor->startSpecificActivityLocked()
                  ActivityStackSupervisor->realStartActivityLocked()
                    IApplicationThread->scheduleLaunchActivity 通知ActivityThread启动新的Activity。
                
        

    3、AppToken的去处
    上述 scheduleLaunchActivity 的时候 会将appToke 传递到ActivityThread中。
    ApplicationThread->scheduleLaunchActivity 这里会将传递过来的appToken 赋值给新创建的 ActivityClientRecord 的token变量。
      ActivityThread->performLaunchActivity() 这里会new 新的Activity;
        Activity->attach(); 这里会new PhoneWindow; 将token赋值给Activity的mToken变量; 创建PhoneWindow对应的WindowManagerImpl;并且将token赋值给Window的变量mAppToken
        Activity->makeVisiable
          WindowManagerImpl->addView()
            WindowManagerGlobal->addView()
              PhoneWindow->adjustLayoutParamsForSubWindow 这个地方会将mAppToken赋值给WindowManager.LayoutParams 变量中  
                ViewRootImpl->setView
                  IWindowSession->addToDisplay()将token 传入到Session 、WindowManagerService中
         
      
    这篇文章分析的更加具体:
    http://blog.csdn.net/ritterliu/article/details/39318859



  • 相关阅读:
    git报错:failed to push some refs to 'git@github.com:JiangXiaoLiang1988/CustomerHandl
    Form_通过Trace分析Concurrent和Form性能和异常详解(案例)
    PLSQL_Oracle Lock锁的处理(案例)
    Report_客制化报表输出Excel后去0问题(案例)
    DBA_Oracle DBA常用表汇总(概念)
    PLSQL_Oracle PLSQL处理日期方式大全(概念)
    PLSQL_Oracle PLSQL内置函数大全(概念)
    PLSQL_PLSQL中DML/DDL/DCL的概念和区分(概念)
    Shell_Oracle Erp基于主机文件Host开发详解(案例)
    Report_客制化以PLSQL输出HTML标记实现WEB报表(案例)
  • 原文地址:https://www.cnblogs.com/lipeil/p/5996405.html
Copyright © 2011-2022 走看看