• 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



  • 相关阅读:
    【leetcode】1365. How Many Numbers Are Smaller Than the Current Number
    【leetcode】1363. Largest Multiple of Three
    【leetcode】1362. Closest Divisors
    【leetcode】1361. Validate Binary Tree Nodes
    【leetcode】1360. Number of Days Between Two Dates
    【leetcode】1359. Count All Valid Pickup and Delivery Options
    【leetcode】1357. Apply Discount Every n Orders
    【leetcode】1356. Sort Integers by The Number of 1 Bits
    ISE应用入门的一些问题
    DDR的型号问题
  • 原文地址:https://www.cnblogs.com/lipeil/p/5996405.html
Copyright © 2020-2023  润新知