• 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



  • 相关阅读:
    ARP攻击及原理
    用C#语言构造蜘蛛程序
    在C#中调用VC编写的dll库
    关于ToolBar和MDI背景的问题
    修改IP和Mac地址的另类方法
    C#调用C++编写的COM DLL
    ARP欺骗技术实现原理分析
    获取本机的MAC的方法
    常用的攻击软件源代码(c)
    c#产生验证图片
  • 原文地址:https://www.cnblogs.com/lipeil/p/5996405.html
Copyright © 2020-2023  润新知