http://m.blog.csdn.net/blog/yhc13429826359/19977429
## 1生命周期圖

## 2主要類圖調用

上面類圖關系中包含兩個進程,一個是應用程序進程,另一個是AMS進程,所以會涉及到進程間通信,android進程間通信用的是Binder通信。
### 2.1客戶進程
?ActivityThread
可以看到該類有一個main方法,其實它是android一個應用程序的入口,每啟動一個應用進程,都會創建ActivityThread與之對應的實例,是應用程序的UI線程,Android進程啟動時會建立消息循環。負責管理應用程序的生命周期,執行系統廣播及其ActivityManagerService請求執行的操作。屬于客戶端對象。
?ApplicationThread&ApplicatinThreadNative
ApplicationThread用來實現ActivityManagerService與ActivityThread之間的交互。在ActivityManagerService需要管理相關Application中的Activity的生命周期時,通過ApplicationThread與ActivityThread通訊,ApplicationThreadNative是ApplicationThread在客戶端的實現。
?ApplicationThreadProxy
ApplicationThreadProxy是ApplicationThread在服務器端的代理。負責和服務器端的ApplicatingThreadNative通訊。
AMS就是通過該代理與ActivityThread進行通信的。
?Activity& Intrumentation
Activity是應用程序真正做事情的類,每一個應用程序只有一個Instrumentation對象,每個Activity內都有一個對該對象的引用。Instrumentation可以理解為應用進程的管家,ActivityThread要創建或暫停某個Activity時,都需要通過Instrumentation。通俗的理解,Instrumentation與ActivityThread的區別,前者像是一個“家庭”里的“管家”,后者是負責創建這個“家庭”,并負責對外打交道,比如接收AMS的通知等。
### 2.2 AMS進程
這里說的AMS進程,實際指的是System_server進程,System_server進程起來的時候啟動AMS服務,AMS實際是ActivityManagerService的縮寫。
?ActivityManagerService
管理Activity的生命周期
?ActivityManagerNative
ActivityManagerService在服務器端的實現,客戶端的請求調用ActivityManagerProxy后,通過IBinder,最終會在ActivityManagerNative中實現。ActivityManagerNative再通過調用ActivityManagerService的相關功能,以完成客戶端請求。
?ActivityManagerProxy
ActivityManagerService的在客戶端的代理。負責和服務器端的ActivityManagerNative通訊。
?ActivityStack
Activity在AMS的棧管理,用來記錄已經啟動的Activity的先后關系,狀態信息等。通過ActivityStack決定是否需要啟動新的進程。
?ActivityRecord
ActivityStack的管理對象,每個Activity在AMS對應一個ActivityRecord來記錄Activity的狀態以及其他的管理信息。
?TaskRecord
AMS抽象出來的一個“任務”的概念,是記錄ActivityRecord的棧,一個“Task”包含若干個ActivityRecord。AMS用TaskRecord確保Activity啟動和退出的順序。
?ProcessRecord
一個Apk文件運行時會對應一個進程,ProcessRecord正是記錄一個進程中的相關信息。
## 3startActivity流程
在Android系統中,應用程序是由Activity組成的,因此,應用程序的啟動過程實際上就是應用程序中的默認Activity的啟動過程。啟動Android應用程序中的Activity的兩種情景,第一,在android設備屏幕中點擊應用程序圖標的情景就會引發Android應用程序中的默認Activity的啟動,從而把應用程序啟動起來,這種啟動方式的特點是會啟動一個新的進程來加載相應的Activity。第二,應用程序內部啟動非默認Activity的過程的源代碼,這種非默認Activity一般是在原來的進程和任務中啟動的。在Android的Activity管理機制中,當退出Activity的時候,在某些情況下并沒有立即把該Activity殺死,而是將其暫時保存起來,當第二次調用startActivity啟動該Activity的時候,就不需要再創建該Activity的實例,直接恢復Activity即可。
### 3.1調用流程圖

對用戶來講,啟動一個Activity有以下幾種方式:
?在應用程序中調用startActivity()啟動指定的Activity
?在Home程序中點擊一個應用圖標,啟動新的Activity
?按“Back”鍵,結束當前Activity,自動啟動上一個Activity
?長按“Home”鍵,顯示當前列表中,從中選則一個啟動
對于AMS內部講,啟動一個Activity有三種方式,如上圖中的①②③分支:
①目標Activity的對象已經存在,那么直接resume該Activity
②目標Activity所在的進程不存在,那么需要創建進程,并在新的進程中啟動該Activity
③目標Activity所在進程已經存在,那么直接在已存在進程中啟動該Activity
### 3.2在新的進程中啟動
以在Home程序中點擊一個應用圖標,啟動MainActivity為例子,介紹如下。
時序圖如下圖:
[](http://photo.blog.sina.com.cn/showpic.html#blogid=89f592f501014ayc&url=http://s4.sinaimg.cn/orignal/89f592f5gcdfcee0f5513)

以上時序圖包含35步驟調用,下面逐一講解:
### 3.2.1(1~4),Launcher中發送startActivity請求
在Android系統中,應用程序是由Launcher啟動起來的,其實,Launcher本身也是一個應用程序,其它的應用程序安裝后,就會Launcher的界面上出現一個相應的圖標,點擊這個圖標時,Launcher就會對應的應用程序啟動起來。
Launcher繼承與Activity,Activity類的有個成員變量mInstrumentation是,它的類型是Intrumentation,它用來監控應用程序和系統的交互。
Instrumentation.execStartActivity:
<table cellspacing="0" cellpadding="0" style="padding:0px; margin:0px auto 10px; font-size:12px; border-collapse:collapse; color:rgb(85,85,85); font-family:宋體,'Arial Narrow',arial,serif"><tbody style="padding:0px; margin:0px"><tr style="padding:0px; margin:0px"><td valign="top" width="549" style="padding:0cm 7px; margin:0px; border:1px solid rgb(0,0,0)"><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px">publicActivityResult execStartActivity(</span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">Context who, IBinder contextThread, IBinder token, Activitytarget,</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">Intent intent, int requestCode, Bundle options) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">IApplicationThread whoThread = (IApplicationThread)contextThread;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">try {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">intent.setAllowFds(false);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">intent.migrateExtraStreamToClip<wbr style="padding:0px; margin:0px">Data();</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">int result = ActivityManagerNative.getDefault()</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">.startActivity(whoThread, intent,</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">intent.resolveTypeIfNeeded(who.getContentResolver()),</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">token, target != null ? target.mEmbeddedID : null,</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">requestCode, 0, null, null, options);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">checkStartActivityResult<wbr style="padding:0px; margin:0px">(result, intent);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">} catch (RemoteException e) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">return null;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></span></p></td></tr></tbody></table>
這里的ActivityManagerNative.getDefault返回ActivityManagerService的遠程接口,即ActivityManagerProxy接口。
### 3.2.2(5-8)?AMS接收客戶端startActivity請求
客戶端通過Binder調用,最終調用到ActivityStack.startActivityLocked:
<table cellspacing="0" cellpadding="0" style="padding:0px; margin:0px auto 10px; font-size:12px; border-collapse:collapse; color:rgb(85,85,85); font-family:宋體,'Arial Narrow',arial,serif"><tbody style="padding:0px; margin:0px"><tr style="padding:0px; margin:0px"><td valign="top" width="568" style="padding:0cm 7px; margin:0px; border:1px solid rgb(0,0,0)"><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px">final intstartActivityLocked(IApplicationThread caller,</span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">Intent intent, String resolvedType, ActivityInfo aInfo, IBinderresultTo,</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">String resultWho, int requestCode,</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">int callingPid, int callingUid, int startFlags, Bundleoptions,</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">boolean componentSpecified, ActivityRecord[] outActivity){</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"/></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">ProcessRecord callerApp = null;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (caller != null) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">callerApp = mService.getRecordForAppLocked(caller);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (callerApp != null) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">callingPid = callerApp.pid;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">callingUid = callerApp.info.uid;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">} else {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">….</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">ActivityRecord sourceRecord = null;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">ActivityRecord resultRecord = null;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">….</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">int launchFlags = intent.getFlags();</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">….</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if((launchFlags&Intent.FLAG_ACTIVITY_FORWARD_RESULT)!= 0</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">&& sourceRecord != null){</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">// Transfer the result target from the source activity to thenew</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">// one being started, including any failures.</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">…….</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">ActivityRecord r = new ActivityRecord(mService, this, callerApp,callingUid,</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">intent, resolvedType, aInfo, mService.mConfiguration,</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">resultRecord, resultWho, requestCode,componentSpecified);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (outActivity != null) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">outActivity[0] = r;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">err = startActivityUncheckedLo<wbr style="padding:0px; margin:0px">cked(r, sourceRecord,</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">startFlags, true, options);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">return err;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></span></p></td></tr></tbody></table>
startActivityLock()主要做了一下幾件事:
①處理傳進來的參數caller,得到調用者的進程信息,并保存在callerApp變量中,這里就是Launcher應用程序的進程信息了。
②處理FLAG_ACTIVITY_FORWARD_RESULT標志。該標志的特殊作用,就是能跨Activity傳Result,比如A1->A2,A2帶該標志啟動A3,那么A3調用setResult,然后finish(),結果將直接返回到A1
③創建一個臨時的ActivityRecord對象,該對象只為了后面調用過程中的各種對比,不一定會最終加入到mHistory列表中。
④判斷mPendingActivityLaunches列表是否有等待的Activity要啟動,如果有先啟動等待的Activity
⑤調用startActivityUncheckedLocked()方法。此時要啟動的Activity已經通過檢驗,被人認為是一個正當的啟動請求。
### 3.2.3(9)創建新的Task
調用ActivityStack.startActivityUncheckedLocked()處理Task問題,因為這里我們是新啟動一個apk,所以將創建新的Task,newTask=true,并調用ActivityStack.startActivityLoacked():
<table cellspacing="0" cellpadding="0" style="padding:0px; margin:0px auto 10px; font-size:12px; border-collapse:collapse; color:rgb(85,85,85); font-family:宋體,'Arial Narrow',arial,serif"><tbody style="padding:0px; margin:0px"><tr style="padding:0px; margin:0px"><td valign="top" width="568" style="padding:0cm 7px; margin:0px; border:1px solid rgb(0,0,0)"><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px">privatefinal void startActivityLocked(ActivityRecord r, booleannewTask,</span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">boolean doResume, boolean keepCurTransition) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (!newTask) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">…….</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">// Place a new activity at top of stack, so it is next tointeract</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">// with the user.</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (addPos < 0) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">addPos = NH;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">mHistory.add(addPos, r);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">r.putInHistory();</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">r.frontOfTask = newTask;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (doResume) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">resumeTopActivityLocked(null);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></span></p></td></tr></tbody></table>
注意AtivityStack中有兩個startActivityLoacked()方法,這里調用的是帶四個參數的,即startActivityLocked(ActivityRecord r, booleannewTask,boolean doResume, booleankeepCurTransition),其中,r為將要啟動的Activity,newTask=true,doResume=true,在這個方法中,將r放到mHistory的最后面doResume=true,所以調用resumeTopActivityLocked(null)。關于Task的概念比較復雜,這里先不講解。
### 3.2.4:(10)運行mHistory中最后一個ActivityRecord
ActivityStack. resumeTopActivityLocked(null)
<table cellspacing="0" cellpadding="0" style="padding:0px; margin:0px auto 10px; font-size:12px; border-collapse:collapse; color:rgb(85,85,85); font-family:宋體,'Arial Narrow',arial,serif"><tbody style="padding:0px; margin:0px"><tr style="padding:0px; margin:0px"><td valign="top" width="568" style="padding:0cm 7px; margin:0px; border:1px solid rgb(0,0,0)"><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px">finalboolean resumeTopActivityLocked(ActivityRecord prev) {</span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">// Find the first activity that is not finishing.</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">ActivityRecord next = topRunningActivityLocked<wbr style="padding:0px; margin:0px">(null);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (next == null) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">// There are no more activities!?<wbr style="padding:0px; margin:0px">Let's just startup the</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">// Launcher...</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (mMainStack) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">return mService.startHomeActivityLocked();</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">next.delayedResume = false;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"/></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">// If the top activity is the resumed one, nothing todo.</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (mResumedActivity == next &&next.state == ActivityState.RESUMED) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">// Make sure we have executed any pending transitions, sincethere</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">// should be nothing left to do at this point.</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">mService.mWindowManager.executeAppTransition();</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">mNoAnimActivities.clear();</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">return false;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"/></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">// If we are sleeping, and there is no resumed activity, and thetop</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">// activity is paused, well that is the state we want.</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if ((mService.mSleeping || mService.mShuttingDown)</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">&& mLastPausedActivity == next&& next.state ==ActivityState.PAUSED) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">// Make sure we have executed any pending transitions, sincethere</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">// should be nothing left to do at this point.</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">mService.mWindowManager.executeAppTransition();</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">mNoAnimActivities.clear();</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">returnfalse;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"/></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">// The activity may be waiting for stop, but that is nolonger</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">// appropriate for it.</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">mStoppingActivities.remove(next);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">mGoingToSleepActivities.remove(next);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">next.sleeping = false;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">mWaitingVisibleActivitie<wbr style="padding:0px; margin:0px">s.remove(next);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (mPausingActivity != null) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (DEBUG_SWITCH) Slog.v(TAG, "Skip resume: pausing=" +mPausingActivity);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">return false;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">…..</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">// We need to start pausing the current activity so the topone</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">// can be resumed...</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (mResumedActivity != null) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (DEBUG_SWITCH) Slog.v(TAG, "Skip resume: need to startpausing");</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">startPausingLocked(userLeaving, false);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">return true;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……..</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></span></p></td></tr></tbody></table>
調用resumeTopActivityLocked(null)啟動真正的Activity。
①調用topRunningActivityLocked()方法取出當前正在運行的ActivityRecord對象
②判斷mHistory中是否有記錄,如果沒有就意味著還沒有啟動任何的Activity,需要首先調用mService.startHomeActivityLocked()方法啟動所謂的“主界面程序”。當然我們這里mHistroy已經有記錄了。
③判斷正在執行的Activity是否和目標Activity一樣,如果一樣,則直接返回。
④判斷當前系統是否處于休眠漲停,如果是,則返回。這里繼續往下執行。
⑤從mStoppingActivities、mWaitingVisibleActivities和mGoingToSleepActivities中刪除目標對象,因為接下來將要被啟動。
⑥判斷當前是否在暫停某個Activity,如果是則還不能運行。這里mPausingActivity=null,所以繼續往下執行。
⑦判斷當前是否有Activity在運行,如果有則先需要暫停當前的Activity。因為我們是在Lancher中啟動mainActivity,所以當前mResumedActivity!=null,所有調用startPausingLocked(userLeaving, false);
### 3.2.5(11~16)暫停當前運行Activity
①調用ActivityStack.startPausingLocked()暫停當前Activity。
②判斷運行當前Activity的進程是否存在。在這里?if (prev.app != null&& prev.app.thread !=null)為真。其中,prev.app為記錄啟動Lancher進程的ProcessRecord,prev.app.thread為Lancher進程的遠程調用接口IApplicationThead,所以可以調用prev.app.thread.schedulePauseActivity,到Lancher進程暫停指定Activity。
③在Lancher進程中消息傳遞,調用ActivityThread.handlePauseActivity(),最終調用ActivityTHread.performPauseActivity暫停指定Activity。接著通過Binder通信,通知AMS已經完成暫停ActivityManagerNative.getDefault().activityPaused(token).
### 3.2.6(17~20) AMS處理暫停Activity事情
在Launcher通過Binder進程間通信機制通知AMS,它已經準備就緒進入Paused狀態,在ActivityStack.completePauseLocked()中完成暫停:
<table cellspacing="0" cellpadding="0" style="padding:0px; margin:0px auto 10px; font-size:12px; border-collapse:collapse; color:rgb(85,85,85); font-family:宋體,'Arial Narrow',arial,serif"><tbody style="padding:0px; margin:0px"><tr style="padding:0px; margin:0px"><td valign="top" width="568" style="padding:0cm 7px; margin:0px; border:1px solid rgb(0,0,0)"><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體">private final void completePauseLocked(){</span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">ActivityRecord prev = mPausingActivity;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (DEBUG_PAUSE) Slog.v(TAG, "Complete pause: " + prev);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"/></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (prev != null) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (prev.finishing) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">prev = finishCurrentActivityLoc<wbr style="padding:0px; margin:0px">ked(prev,FINISH_AFTER_VISIBLE);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">} else if (prev.app != null) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (prev.configDestroy) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">destroyActivityLocked(prev, true, false,"pause-config");</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">} else {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">mStoppingActivities.add(prev);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (mStoppingActivities.size() > 3) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">// If we already have a few activities waiting to stop,</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">// then give up on things going idle and start clearing</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">// them out.</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (DEBUG_PAUSE) Slog.v(TAG, "To many pending stops, forcingidle");</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">scheduleIdleLocked();</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">} else {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">checkReadyForSleepLocked<wbr style="padding:0px; margin:0px">();</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">} else {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (DEBUG_PAUSE) Slog.v(TAG, "App died during pause, not stopping:" + prev);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">prev = null;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">mPausingActivity = null;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"/></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (!mService.isSleeping()) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">resumeTopActivityLocked(prev);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">} else {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">checkReadyForSleepLocked<wbr style="padding:0px; margin:0px">();</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></span></p></td></tr></tbody></table>
①給prev賦值mPausingActivity,即上一個被執行的Activity,即Launcer
②如果prev的finishing為true,說明上一個Activity已經完成,因此需要調用finishCurrentActivityLocked()執行相關操作。一般的流程不會為true,這個條件似乎只有內存回收的時候才會被執行。
③將mPausingActivity變量置為空
④調用resumeTopActivityLocked方法正式啟動目標Activity,即MainActivity
### 3.2.7:(21~23)正式啟動目標Activity
調用AcivityStack.resumeTopActivityLocked:
<table cellspacing="0" cellpadding="0" style="padding:0px; margin:0px auto 10px; font-size:12px; border-collapse:collapse; color:rgb(85,85,85); font-family:宋體,'Arial Narrow',arial,serif"><tbody style="padding:0px; margin:0px"><tr style="padding:0px; margin:0px"><td valign="top" width="568" style="padding:0cm 7px; margin:0px; border:1px solid rgb(0,0,0)"><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體">final booleanresumeTopActivityLocked(ActivityRecord prev) {</span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">ActivityRecord next = topRunningActivityLocked<wbr style="padding:0px; margin:0px">(null);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (mResumedActivity != null) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (DEBUG_SWITCH) Slog.v(TAG, "Skip resume: need to startpausing");</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">startPausingLocked(userLeaving, false);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">return true;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"/></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (next.app != null &&next.app.thread != null) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">startSpecificActivityLoc<wbr style="padding:0px; margin:0px">ked(next, true, true);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"/></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">return true;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></span></p></td></tr></tbody></table>
①該方法在3.2.4步驟中調用過,那時是因為mResumedActivity != null,有Activity正在運行,所以去執行了startPausingLocked暫停Laucher去了。這時候,mResumedActivity=null,所以繼續往下執行。
②判斷講要啟動的Activity的客戶進程是否存在,這里next.app != null &&next.app.thread != null為false
③調用ActivityStack.startSpecificActivityLocked
<table cellspacing="0" cellpadding="0" style="padding:0px; margin:0px auto 10px; font-size:12px; border-collapse:collapse; color:rgb(85,85,85); font-family:宋體,'Arial Narrow',arial,serif"><tbody style="padding:0px; margin:0px"><tr style="padding:0px; margin:0px"><td valign="top" width="568" style="padding:0cm 7px; margin:0px; border:1px solid rgb(0,0,0)"><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體">private final voidstartSpecificActivityLoc<wbr style="padding:0px; margin:0px">ked(ActivityRecord r,</wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">boolean andResume, boolean checkConfig) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">// Is this activity's application already running?</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">ProcessRecord app =mService.getProcessRecordLocked(r.processName,</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">r.info.applicationInfo.uid);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (app != null && app.thread !=null) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">realStartActivityLocked(r, app, andResume, checkConfig);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden; text-indent:112px"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體">return;</span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"/></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">mService.startProcessLocked(r.processName, r.info.applicationInfo,true, 0,</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">"activity", r.intent.getComponent(), false);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></span></p></td></tr></tbody></table>
④客戶進程不存在,app!= null && app.thread !=null為false,所以調用mService.startProcessLocked() fork一個新的進程。
### 3.2.8(24) fork一個新的進程
①AMS通過Socket通信,向Zygote發送一個創建進程請求,Zygote創建新進程。
②創建好進程后,調用ActivityThread.main()。到此,我們到了新了一個進程中,也是程序的入口出。
③調用ActivityThread.attach()開始新的應用程序,接著同過Binder通信通知AMS,新的進程已經創建好了,可以開始新的程序了。
### 3.2.9(26~28) AMS準備執行目標Activity
目標進程啟動后,報告給AMS,自己已經啟動完畢可以啟動Activity了,這里通過IPC調用AMS的attachApplication方法完成。
ActivityManagerService.attachApplication():
<table cellspacing="0" cellpadding="0" style="padding:0px; margin:0px auto 10px; font-size:12px; border-collapse:collapse; color:rgb(85,85,85); font-family:宋體,'Arial Narrow',arial,serif"><tbody style="padding:0px; margin:0px"><tr style="padding:0px; margin:0px"><td valign="top" width="568" style="padding:0cm 7px; margin:0px; border:1px solid rgb(0,0,0)"><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體">public final voidattachApplication(IApplicationThread thread) {</span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">synchronized (this) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">int callingPid = Binder.getCallingPid();</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">final long origId = Binder.clearCallingIdentity();</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">attachApplicationLocked(thread,callingPid);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">Binder.restoreCallingIdentity(origId);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></span></p></td></tr></tbody></table>
①根據Binder.getCallingPid(),或得客戶進程pid,并調用attachApplicationLocked(IApplicationThreadthread,int pid)
②在attachApplicationLocked中,根據pid找到對應的ProcessRecord對象,如果找不到說明改pid客戶進程是一個沒經過AMS允許的進程。
<table cellspacing="0" cellpadding="0" style="padding:0px; margin:0px auto 10px; font-size:12px; border-collapse:collapse; color:rgb(85,85,85); font-family:宋體,'Arial Narrow',arial,serif"><tbody style="padding:0px; margin:0px"><tr style="padding:0px; margin:0px"><td valign="top" width="568" style="padding:0cm 7px; margin:0px; border:1px solid rgb(0,0,0)"><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體">private final booleanattachApplicationLocked(IApplicationThread thread,</span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">int pid) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">ProcessRecord app;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (pid != MY_PID && pid>= 0) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">synchronized (mPidsSelfLocked) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">app = mPidsSelfLocked.get(pid);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (app == null) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">returnfalse;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"/></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">// If this application record is still attached to aprevious</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">// process, clean it up now.</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (app.thread != null) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">handleAppDiedLocked(app, true, true);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">app.thread = thread;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">app.curAdj = app.setAdj = -100;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">app.curSchedGroup = Process.THREAD_GROUP_DEFAULT;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">app.setSchedGroup =Process.THREAD_GROUP_BG_NONINTERACTIVE;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">app.forcingToForeground = null;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">app.foregroundServices = false;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">app.hasShownUi = false;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">app.debugging = false;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">ensurePackageDexOpt(app.instrumentationInfo != null</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">? app.instrumentationInfo.packageName</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">: app.info.packageName);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">// See if the top visible activity is waiting to run in thisprocess...</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">ActivityRecord hr =mMainStack.topRunningActivityLocked<wbr style="padding:0px; margin:0px">(null);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (hr != null && normalMode){</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (hr.app == null && app.info.uid== hr.info.applicationInfo.uid</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">&&processName.equals(hr.processName)) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (mMainStack.realStartActivityLocked(hr, app, true,true))</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">return true;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></span></p></td></tr></tbody></table>
③為ProcessRecordapp對象內部變量賦值
④確保目標程序(APK)文件已經被轉換為了odex文件。Android中安裝程序是APK文件,實際上是一個zip文件。
⑤調用ActivityStack.realStartActivityLocked通知客戶進程運行指定Activity.
⑥調用ApplicationThread.scheduleLaunchActivity,啟動指定Activity。
### 3.2.10:(29~35)客戶進程啟動指定Activity
AMS通過IPC通行,通知客戶進程啟動指定Activity
①調用ApplicationThread.scheduleLaunchActivity
②經過Handler消息傳動,調用ActivityThread.handleLaunchActivity()
③調用ActivityThread.performLaunchActivity()完成Activity的加載,并最終調用Activity生命周期的onCreate()方法
④performLaunchActivity返回,繼續調用ActivityThread.handleResumeActivity(),該方法內部又調用ActivityThread.performResumeActivity(),其內部僅僅調用了目標Activity的onResume()方法。到此Activity啟動完成。
⑤添加一個IdleHandler對象,因為在一般情況下,該步驟執行完畢后,Activity就會進入空閑狀態,所以就可以進行內存回收。
### 3.3在已有進程中啟動
在已有的進程中啟動Activity,也就是在一個應用程序中啟動內部Activity,其過程跟3.2小節大致一樣,這里我們不會像3.2小節詳細分析每一步驟,我們只看差別的地方。這里以啟動subActivity為例子。時序圖如下:


以上時序圖包含29步驟調用,下面逐一講解:
### 3.3.1(1~3)在MainActivity啟動Activity
這一步跟3.2.1小節一樣
### 3.3.2(4~7) AMS接收客戶端startActivity請求
這一步跟3.2.2小節一樣
### 3.3.3(8)不需要創建新的Task
調用ActivityStack.startActivityUncheckedLocked()處理Task問題,因為這里我們是在已有應用中startActivity,也不設置標志要在新的Task中啟動Activity,所以不創建新的Task,newTask=false,并調用
ActivityStack.startActivityLoacked():
<table cellspacing="0" cellpadding="0" style="padding:0px; margin:0px auto 10px; font-size:12px; border-collapse:collapse; color:rgb(85,85,85); font-family:宋體,'Arial Narrow',arial,serif"><tbody style="padding:0px; margin:0px"><tr style="padding:0px; margin:0px"><td valign="top" width="568" style="padding:0cm 7px; margin:0px; border:1px solid rgb(0,0,0)"><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px">privatefinal void startActivityLocked(ActivityRecord r, booleannewTask,</span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">boolean doResume, boolean keepCurTransition) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (!newTask) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">…….</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">// Place a new activity at top of stack, so it is next tointeract</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">// with the user.</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (addPos < 0) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">addPos = NH;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">mHistory.add(addPos, r);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">r.putInHistory();</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">r.frontOfTask = newTask;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (doResume) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">resumeTopActivityLocked(null);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></span></p></td></tr></tbody></table>
注意AtivityStack中有兩個startActivityLoacked()方法,這里調用的是帶四個參數的,即startActivityLocked(ActivityRecord r, booleannewTask,boolean doResume, booleankeepCurTransition),其中,r為將要啟動的Activity,newTask=false,doResume=true,在這個方法中,將r放到mHistory的最后面doResume=true,所以調用resumeTopActivityLocked(null)。
### 3.3.4(9)準備啟動mHistory中最后一個Activity
這一步跟3.2.4小節一樣
### 3.3.5(10~15)暫停MainActivity
這一步跟3.2.5小節一樣
### 3.3.6(16~19) AMS處理暫停MainActivity
這一步跟3.2.6小節一樣
### 3.3.7(20~22)正式啟動目標Activity
調用AcivityStack.resumeTopActivityLocked:
<table cellspacing="0" cellpadding="0" style="padding:0px; margin:0px auto 10px; font-size:12px; border-collapse:collapse; color:rgb(85,85,85); font-family:宋體,'Arial Narrow',arial,serif"><tbody style="padding:0px; margin:0px"><tr style="padding:0px; margin:0px"><td valign="top" width="568" style="padding:0cm 7px; margin:0px; border:1px solid rgb(0,0,0)"><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體">final booleanresumeTopActivityLocked(ActivityRecord prev) {</span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">ActivityRecord next = topRunningActivityLocked<wbr style="padding:0px; margin:0px">(null);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (mResumedActivity != null) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (DEBUG_SWITCH) Slog.v(TAG, "Skip resume: need to startpausing");</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">startPausingLocked(userLeaving, false);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">return true;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"/></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (next.app != null &&next.app.thread != null) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">startSpecificActivityLoc<wbr style="padding:0px; margin:0px">ked(next, true, true);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"/></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">return true;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></span></p></td></tr></tbody></table>
①調用startSpecificActivityLocked(next, true,true)
<table cellspacing="0" cellpadding="0" style="padding:0px; margin:0px auto 10px; font-size:12px; border-collapse:collapse; color:rgb(85,85,85); font-family:宋體,'Arial Narrow',arial,serif"><tbody style="padding:0px; margin:0px"><tr style="padding:0px; margin:0px"><td valign="top" width="568" style="padding:0cm 7px; margin:0px; border:1px solid rgb(0,0,0)"><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體">private final voidstartSpecificActivityLoc<wbr style="padding:0px; margin:0px">ked(ActivityRecord r,</wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">boolean andResume, boolean checkConfig) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">// Is this activity's application already running?</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">ProcessRecord app =mService.getProcessRecordLocked(r.processName,</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">r.info.applicationInfo.uid);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (app != null && app.thread !=null) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">realStartActivityLocked(r, app, andResume, checkConfig);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden; text-indent:112px"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體">return;</span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"/></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">mService.startProcessLocked(r.processName, r.info.applicationInfo,true, 0,</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">"activity", r.intent.getComponent(), false);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px; font-family:宋體"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></span></p></td></tr></tbody></table>
②subActivity進程已經存在,app != null&& app.thread !=null為true,所以調用realStartActivityLocked。
<table cellspacing="0" cellpadding="0" style="padding:0px; margin:0px auto 10px; font-size:12px; border-collapse:collapse; color:rgb(85,85,85); font-family:宋體,'Arial Narrow',arial,serif"><tbody style="padding:0px; margin:0px"><tr style="padding:0px; margin:0px"><td valign="top" width="568" style="padding:0cm 7px; margin:0px; border:1px solid rgb(0,0,0)"><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px">finalboolean realStartActivityLocked(ActivityRecord r,</span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">ProcessRecord app, boolean andResume, booleancheckConfig)</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">throws RemoteException {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">…..</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">app.thread.scheduleLaunchActivity(new Intent(r.intent),r.appToken,</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">System.identityHashCode(r), r.info,</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">new Configuration(mService.mConfiguration),</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">r.compat, r.icicle, results, newIntents,!andResume,</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">mService.isNextTransitionForward(), profileFile,profileFd,</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">profileAutoStop);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">return true;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}<wbr style="padding:0px; margin:0px"/></wbr></wbr></wbr></span></p></td></tr></tbody></table>
③調用ApplicationThread.scheduleLaunchActivity,啟動指定Activity。
### 3.3.8(23~29)客戶進程啟動指定Activity
這一步跟3.2.10是一樣的
### 3.4在已有的ActivityRecord中恢復指定Activity
經過上面3.2和3.3小節,現在對Activity的啟動流程應該是比較清晰的了,這一節就簡單的講下恢復Activity的流程。當ActivityRecord已經記錄有一個Activity,如果再次調用startActivity,并沒有標志要創建Activity新的實例,那么就可以直接恢復該Activity。
①啟動一個Activity,跟前面3.2節一樣,都需要暫停當前正在運行的Activity,暫停流程這里就不講了,完成暫停后,調用ActivityStack.resumeTopActivityLocked()。
②因為AMS和ActivityTHread的IPC通信,resumeTopActivityLocked會被反復調用幾次,每次都會根據一些變量值的差異,走不同的流程。
<table cellspacing="0" cellpadding="0" style="padding:0px; margin:0px auto 10px; font-size:12px; border-collapse:collapse; color:rgb(85,85,85); font-family:宋體,'Arial Narrow',arial,serif"><tbody style="padding:0px; margin:0px"><tr style="padding:0px; margin:0px"><td valign="top" width="568" style="padding:0cm 7px; margin:0px; border:1px solid rgb(0,0,0)"><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px">finalboolean resumeTopActivityLocked(ActivityRecord prev) {</span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">// Find the first activity that is not finishing.</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">ActivityRecord next = topRunningActivityLocked<wbr style="padding:0px; margin:0px">(null);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (mResumedActivity != null) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (DEBUG_SWITCH) Slog.v(TAG, "Skip resume: need to startpausing");</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">startPausingLocked(userLeaving, false);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">return true;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (next.app != null &&next.app.thread != null) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">if (DEBUG_SWITCH) Slog.v(TAG, "Resume running: " +next);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">try {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">next.app.thread.scheduleResumeActivity(next.appToken,</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">mService.isNextTransitionForward());</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"/></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">checkReadyForSleepLocked<wbr style="padding:0px; margin:0px">();</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"/></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">} catch (Exception e) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">// Whoops, need to restart this activity!</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">startSpecificActivityLoc<wbr style="padding:0px; margin:0px">ked(next, true, false);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">return true;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">} else {</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">……</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">return true;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></p><p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden"><span lang="EN-US" style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px"><wbr style="padding:0px; margin:0px">}</wbr></wbr></wbr></span></p></td></tr></tbody></table>
③這里,mResumedActivity = null,不走暫停流程。
④next.app != null &&next.app.thread != null為true,調用ApplicationThead.scheduleResumeActivity(),到客戶進程恢復指定Activity。
⑤經過消息傳遞,調用ActivityTHread.handleResumeActivity()
⑥調用ActivityTHread.performResumeActivity()正在恢復Activity,接著回調Activity的onResume()方法。
## 4 stop停止Activity
前面幾節匯總,A啟動到B時,需要先暫停A,然后再啟動B。什么時候停止(stop)或者銷毀(Destory)呢?
### 4.1從暫停到停止全過程

4按Home鍵回到桌面
5按Back鍵回到上一個Activity
6長按Home鍵
- 前言
- Android觸摸屏事件派發機制詳解與源碼分析一(View篇)
- Android觸摸屏事件派發機制詳解與源碼分析二(ViewGroup篇)
- Android觸摸屏事件派發機制詳解與源碼分析三(Activity篇)
- Android應用setContentView與LayoutInflater加載解析機制源碼分析
- Android應用Context詳解及源碼解析
- Android異步消息處理機制詳解及源碼分析
- Android應用Activity、Dialog、PopWindow、Toast窗口添加機制及源碼分析
- Android ListView工作原理完全解析,帶你從源碼的角度徹底理解
- Activity啟動過程全解析
- Android應用AsyncTask處理機制詳解及源碼分析
- 說說 PendingIntent 的內部機制
- Android Activity.startActivity流程簡介
- Activity界面顯示全解析
- 框架層理解Activity生命周期(APP啟動過程)
- APK安裝過程及原理詳解
- Android構建過程簡述
- Android應用層View繪制流程與源碼分析