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