appToken 來源

1、appToken的來源ActivityRecord, 用於在ActivityManagerService中記錄Activity相關的信息(ActivityThread端 用的是ActivityClientRecord),它有個內部靜態內Token, 繼承IApplicationToken.stub, 看名稱能夠知道它是一個Binder服務的實現類,並且是用AIDL架構實現的,具體可見frameworks\base\core\java\android\view\IApplicationToken.aidl文件二、appToken的建立咱們在建立ActivityRecord的時候,會建立它,以下:appToken = new Token(this),  它持有了ActivityRecord的弱引用。一般咱們在AMS收到啓動新的Activity命令的時候,會在ActivityStackSupervisor->startActivityLocked 中初始化一個 ActivityRecordAMS->startActivity()AMS->startActivityAsUser()  ActivityStackSupervisor->startActivityMaywait()    ActivityStackSupervisor->startActivityLocked(), 這裏建立新的ActivityRecord      ActivityStackSupervisor->startActivityUncheckedLocked        ActivityStack->resumeTopActivityLocked()          ActivityStack->resumeTopActivityInnerLocked()            ActivityStackSupervisor->startSpecificActivityLocked()              ActivityStackSupervisor->realStartActivityLocked()                IApplicationThread->scheduleLaunchActivity 通知ActivityThread啓動新的Activity。                三、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
相關文章
相關標籤/搜索