安卓Activity的啓動模式
1.1 兩種啓動方式
1. 在AndroidMainfest.xml中啓動
例如:
AndroidMainfest.xml.xml中設置Activity的launchMode=“singleTop”
有singleInstance,singleTask,singleTop,standard四種可選
2. 在代碼中啓動
例如:
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
重要的幾個Intent Flag介紹:
l FLAG_ACTIVITY_CLEAR_TOP
如果在ABCD的堆棧狀態下,以該標識啓動B,則會銷燬CD,且B也是重新創建的(與SingleTask有區別),如果配合FLAG_ACTIVITY_SINGLE_TOP,則就會成爲類似SingleTask的模式
l FLAG_ACTIVITY_BROUGHT_TO_FRONT
如果ABCD中A以這個標識啓動B,則D再啓動B,B將會被調入前臺,成爲ACDB,且B不會重新創建
l FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
這個標識主要用於創建一個還原點,再次啓動該Task時會將還原點之上包括其本身都銷燬掉,如果在一個程序中以該標識啓動了另外一個程序的功能,如一個用於看圖的軟件,當退出桌面,再點擊這個程序,看圖軟件會消失。
l FLAG_ACTIVITY_NEW_TASK
這個是最常用的,但是往往會被誤解,在程序根Activity的Task棧里加此標識開啓新Activity都不會創建新的Task,只有當另一程序(進程)啓動帶有改標識的Activity時,纔會創建新的Task。如果配合FLAG_ACTIVITY_NEW_MULTI_TASK,則無論什麼情況都會創建新的Task,就成了SingleInstance的情況了。
3. 問題:代碼設置的啓動模式和AndroidMainfest.xml設置的啓動模式衝突的時候,會按照哪個執行?
Intent Flag 會覆蓋Manifest裏面的launchMode
1.2 四種啓動模式
1. standard
默認模式,啓動的所有Activity都會入棧,無論是之前啓動過的還是沒有啓動過的,最終會形成的特色棧況爲: ABCDEF…….或者ABCDDCEFAB……..
每次激活Activity時(startActivity),都創建Activity實例,並放入任務棧
2. singleTop
跟標準模式唯一的區別就是,當棧頂爲要啓動的Activity時,複用該Activity,只會調用onNewIntent,而不會onCreate。所以不會出現ABCDD,而只會有ABCD,
3. singleTask
設置了"singleTask"啓動模式的Activity,它在啓動的時候,會先在系統中查找屬性值affinity等於它的屬性值taskAffinity的任務存在;如果存在這樣的任務,它就會在這個任務中啓動,否則就會在新任務中啓動。因此,如果我們想要設置了"singleTask"啓動模式的Activity在新的任務中啓動,就要爲它設置一個獨立的taskAffinity屬性值。
如果設置了"singleTask"啓動模式的Activity不是在新的任務中啓動時,它會在已有的任務中查看是否已經存在相應的Activity實例,如果存在,就會把位於這個Activity實例上面的Activity全部結束掉,即最終這個Activity實例會位於任務的堆棧頂端中。
(看測試test 2.1 & 2.2)
4. singleInstance
啓動的Activity會開啓一個新的Task並獨享,在其上啓動的Activity會尋找其他合適的Task;如果應用1的任務棧中創建了MainActivity實例,如果應用2也要激活MainActivity,則不需要創建,兩應用共享該Activity實例
1.3 調試分析的方法
1. ActivityManager獲取任務棧信息 :
必須在程序中注入調試代碼,因爲要控制在發佈時代碼必須被清理了。RunningTaskInfo雖然能夠告訴我們有多少個Activity保存在其上,但是沒有提供完整的列表,只能看到頭尾兩個Activity。給出的兩個Activity的屬性:topActivity和baseActivity也只是ComponentName類型,並非真實的Activity對象,因此除了類的名字沒有其他更多信息。
2. adb命令:
進入你的adb目錄的platform-tools目錄下,輸入一下命令:
l adb shell dumpsys activity (包含了activity,service等)
出來的內容太多了現場演示了
l adb shell dumpsys activity activities 出來的信息少一些,只和Activity相關,這裏我使用了這個,方便查看
出來的內容太多了現場演示了,展示下面的一部分
例子:展示的某個Activity相關的內容:
* Hist #1: ActivityRecord{17aec5bb u0 com.tencent.mobileqq/.activity.QQLSActivity t20145} packageName=com.tencent.mobileqq processName=com.tencent.mobileqq launchedFromUid=10214 launchedFromPackage=com.tencent.mobileqq userId=0 app=ProcessRecord{2b50d726 12735:com.tencent.mobileqq/u0a214} Intent { flg=0x14840000 cmp=com.tencent.mobileqq/.activity.QQLSActivity } frontOfTask=false task=TaskRecord{182ccc00 #20145 A=com.tencent.mobileqq U=0 sz=2} taskAffinity=com.tencent.mobileqq realActivity=com.tencent.mobileqq/.activity.QQLSActivity baseDir=/data/app/com.tencent.mobileqq-2/base.apk dataDir=/data/data/com.tencent.mobileqq stateNotNeeded=false componentSpecified=true mActivityType=0 compat={480dpi} labelRes=0x7f0a12eb icon=0x7f020358 theme=0x103005f config={0 1.0 ?mcc?mnc zh_CN ldltr sw360dp w360dp h615dp 480dpi nrml long port finger -keyb/v/h -nav/h s.11} taskDescription: iconFilename=null label="null" color=ffe6e6e6 launchFailed=false launchCount=0 lastLaunchTime=-1m10s530ms haveState=true icicle=Bundle[mParcelledData.dataSize=2664] state=STOPPED stopped=true delayedResume=false finishing=false keysPaused=false inHistory=true visible=true sleeping=true idle=true fullscreen=true noDisplay=false immersive=false launchMode=1 frozenBeforeDestroy=false forceNewConfig=false mActivityType=APPLICATION_ACTIVITY_TYPE waitingVisible=false nowVisible=true lastVisibleTime=-1m10s6ms multiWindowStyle=MultiWindowStyle{type=0, zone=ZONE_UNKNOWN, option=0x01000002, bounds=null, isNull=false, isolatedCenterPoint=Point(0, 0), scale=0.0, specificTaskId=-1} bMultiInstance=false mIsLastShownWhenLocked=true |
command + K是terminal的清屏快捷鍵
l 在adb命令中顯示的launchMode代表的數值
standard : launchMode = 0
singleTop : launchMode=1
singleTask: launchMode= 2
singleInstance: launchMode=3
l Task概念:
Task相當於一個棧,用來管理Activity,默認情況下每一個程序都會擁有一個自己的Task,有自己獨立的id,所以一個手機同時可能會擁有很多Task,標識就是id,默認情況下跟包名有關係。
1.4 啓動模式對於獲取到的Result的時機和內容的影響
l StartActivityForResult的時候,requestCode必須>0,否則收不到result
l startActivityForResult對singleInstance啓動的對象的影響。LaunchMode與StartActivityForResult的關係
android5.0之前,Activity A通過startActivityForResult()啓動一個Activity B,系統將首先檢查Activity的launchMode,如果爲A頁面設置爲SingleInstance或者B頁面設置爲singleTask或者singleInstance,則會在LaunchFlags中加入FLAG_ACTIVITY_NEW_TASK標誌,而如果含有FLAG_ACTIVITY_NEW_TASK標誌的話,onActivityResult將會立即接收到一個cancle的信息。所以會在啓動Activity
B時調用onActivityResult(),而返回Activity A時不會調用onActivityResult()。
android5.0之後,Activity A通過startActivityForResult()啓動一個Activity B,不管A頁面或者是B頁面設置launchMode爲任何一種模式,都是會在返回Activity A時調用onActivityResult()。
1.5 其他隊啓動模式有影響的參數
1. android:allowTaskReparenting
默認false,程序A已經啓動了數個Activity,其中包含Activity1,如果這個Activity1擁有該屬性,當程序B也要啓動它的時候,其可宿主到程序B內。看測試的例子test3.1 & 3.2
2. 清理Back stack
如果用戶離開一個task很久,系統就會清理這個task中的所有activities,除了根activity。當用戶返回到這個task,只有根activity會被恢復。
有一些activity的屬性,你可以用來改變這一行爲:
l alwaysRetainTaskState
默認false,操作系統會在程序長時間不會動的時候,清除Task狀態,如果開啓這個,系統會繼續保持直到再次打開,只對根Activity生效
l clearTaskOnLaunch
默認false,如果開啓,從桌面重新進入程序時,只會存在根Activity,如有其他程序的Activity,他們將會尋找宿主,這個屬性也只對根生效
l finishOnTaskLaunch
默認false,如果開啓,程序重新啓動,會銷燬所有存在的Activity,也只對根Activity生效
1.6 啓動模式的適用場景
1. singleTop: & CLEAR_TOP
Notification的進入
2. singleTask:
應用場景:應用主頁面;
3. SingleInstance:
系統手機的打電話程序之類的,
Widget
1.7 啓動模式的原理分析
Activity啓動和創建:http://www.cnblogs.com/bastard/archive/2012/04/07/2436262.html
Activity啓動
ActivityStack管理
源碼地址:
http://grepcode.com/project/repository.grepcode.com/java/ext/com.google.android/android/
源碼解析:
http://892848153.iteye.com/blog/1930416
ActivityStackSupervisor類解析:
http://www.aiuxian.com/article/p-1880233.html
SingleTask的疑惑:http://blog.csdn.net/luoshengyang/article/details/6714543
1.8 自己的一些測試
序號 | 測試模塊 | 步驟 | 結果 | 結論 |
1.1 | singleTask最爲程序入口 |
1.MainActivity設置launchMode=singleTask,並且是程序入口Activity
2.正常啓動BActivity(launchMode=standard),再正常啓動CActivity(launchMode=standard)
3.從CActivity啓動MainActivity(launchMode=singleTask)
|
2步驟之後:
Task id #20866
* Hist #2: ActivityRecord{298ecebf u0 com.example.yanruzhang.launchmodetestdemo/.CActivity t20866}
*
Hist #1: ActivityRecord{27752bf5 u0 com.example.yanruzhang.launchmodetestdemo/.BActivity t20866}
*
Hist #0: ActivityRecord{24bf2e89 u0 com.example.yanruzhang.launchmodetestdemo/.MainActivity t20866}
3步驟之後:
Task id #20866
* Hist #0: ActivityRecord{24bf2e89 u0 com.example.yanruzhang.launchmodetestdemo/.MainActivity t20866}
|
|
1.2 | singleTask不作爲程序入口,不設置task affinity |
1.MainActivity設置launchMode=singleTask,並且是程序入口Activity
2.啓動BActivity(launchMode=singleTask),3.再啓動BActivity(launchMode=singleTask)
4.再啓動CActivity(launchMode=standard)
5.再啓動BActivity(launchMode=singleTask)
6.再啓動MainActivity(launchMode=singleTask)
|
步驟3之後:
Task id #21555
* Hist #1: ActivityRecord{31dacb3e u0 com.example.yanruzhang.launchmodetestdemo/.BActivity t21555}
* Hist #0: ActivityRecord{14702289 u0 com.example.yanruzhang.launchmodetestdemo/.MainActivity t21555}
步驟4之後:
Task id #21555
* Hist #2: ActivityRecord{2ea9b777 u0 com.example.yanruzhang.launchmodetestdemo/.CActivity t21555}
* Hist #1: ActivityRecord{31dacb3e u0 com.example.yanruzhang.launchmodetestdemo/.BActivity t21555}
* Hist #0: ActivityRecord{14702289 u0 com.example.yanruzhang.launchmodetestdemo/.MainActivity t21555}
步驟5之後:
Task id #21552
* Hist #1: ActivityRecord{3ffd7da4 u0 com.example.yanruzhang.launchmodetestdemo/.BActivity t21552}
* Hist #0: ActivityRecord{99703cb u0 com.example.yanruzhang.launchmodetestdemo/.MainActivity t21552}
步驟6之後:
Task id #21556
* Hist #0: ActivityRecord{1a2ef18d u0 com.example.yanruzhang.launchmodetestdemo/.MainActivity t21556}
|
|
1.3 |
1.打開App B的BMainActivity
2.再打開App B的BSecondActivity(launchMode=singleTask)
3.按Home,打開App A的MainActivity
4.再打開App A的BActivity
5.再通過App A的BActivity打開App B的BSecondActivity(launchMode=singleTask)
|
步驟5之後:
Task id #25558
* Hist #1: ActivityRecord{3e867083 u0 com.example.yanruzhang.bapplication/.BSecondActivity t25558}
* Hist #0: ActivityRecord{2265dfc u0 com.example.yanruzhang.bapplication/.BMainActivity t25558}
Task id #25559
* Hist #1: ActivityRecord{3f3e6c63 u0 com.example.yanruzhang.launchmodetestdemo/.BActivity t25559}
* Hist #0: ActivityRecord{30208a5c u0 com.example.yanruzhang.launchmodetestdemo/.MainActivity t25559}
|
||
2.1 | singleTask不設置taskAffinity |
1.MainActivity設置launchMode=singleTask,並且是程序入口Activity
2.正常啓動BActivity(launchMode=standard),再正常啓動CActivity(launchMode=standard)
3.從CActivity啓動DActivity(launchMode=singleTask,不設置taskAffinity)
|
2步驟之後和序號1的2步驟之後相同
3步驟之後:
Task id #20870
* Hist #3: ActivityRecord{20c57415 u0 com.example.yanruzhang.launchmodetestdemo/.DActivity t20870}
* Hist #2: ActivityRecord{173c4b4b u0 com.example.yanruzhang.launchmodetestdemo/.CActivity t20870}
* Hist #1: ActivityRecord{136f0f0d u0 com.example.yanruzhang.launchmodetestdemo/.BActivity t20870}
* Hist #0: ActivityRecord{3f514ce u0 com.example.yanruzhang.launchmodetestdemo/.MainActivity t20870}
|
|
2.2 | singleTask設置taskAffinity |
1.MainActivity設置launchMode=singleTask,並且是程序入口Activity
2.正常啓動BActivity(launchMode=standard),再正常啓動CActivity(launchMode=standard)
3.從CActivity啓動DActivity(launchMode=singleTask,taskAffinity=“com.zyr")
|
2步驟之後和序號1的2步驟之後相同
3步驟之後:
Task id #20876
* Hist #0: ActivityRecord{fda3e82 u0 com.example.yanruzhang.launchmodetestdemo/.DActivity t20876}
Task id #20875
* Hist #2: ActivityRecord{168a141e u0 com.example.yanruzhang.launchmodetestdemo/.CActivity t20875}
* Hist #1: ActivityRecord{11394488 u0 com.example.yanruzhang.launchmodetestdemo/.BActivity t20875}
* Hist #0: ActivityRecord{35df624d u0 com.example.yanruzhang.launchmodetestdemo/.MainActivity t20875}
|
|
3.1 | allowTaskReParenting |
關於設置allowTaskReParenting=false
1.打開AApplication,默認啓動AMainActivity界面
2.再打開BApplication的CommonActivity(launchMode=standard,allowTaskReparenting=false)頁面
3.按home鍵
4.打開BApplication
5.按home鍵
6.打開AApplication
|
2步驟之後:
Task id #21451
* Hist #1: ActivityRecord{3f07fec5 u0 com.example.yanruzhang.bapplication/.CommonActivity t21451}
* Hist #0: ActivityRecord{30483d0c u0 com.example.yanruzhang.launchmodetestdemo/.MainActivity t21451}
3步驟之後:和2一樣
4步驟之後:
Task id #21453
* Hist #0: ActivityRecord{3eb809e8 u0 com.example.yanruzhang.bapplication/.BMainActivity t21453}
Task id #21451
* Hist #1: ActivityRecord{3f07fec5 u0 com.example.yanruzhang.bapplication/.CommonActivity t21451}
* Hist #0: ActivityRecord{30483d0c u0 com.example.yanruzhang.launchmodetestdemo/.MainActivity t21451}
|
|
3.2 | allowTaskReParenting |
關於設置allowTaskReParenting=true
1.打開AApplication,默認啓動AMainActivity界面
2.再打開BApplication的CommonActivity(launchMode=standard,allowTaskReparenting=true)頁面
3.按home鍵
4.打開BApplication
5.按home鍵
6.打開AApplication
|
2步驟之後:
Task id #21458
* Hist #1: ActivityRecord{3630e58b u0 com.example.yanruzhang.bapplication/.CommonActivity t21458}
* Hist #0: ActivityRecord{3a4e9f38 u0 com.example.yanruzhang.launchmodetestdemo/.MainActivity t21458}
3步驟之後同2
4步驟之後:
Task id #21459
* Hist #1: ActivityRecord{3630e58b u0 com.example.yanruzhang.bapplication/.CommonActivity t21459}
* Hist #0: ActivityRecord{2c091f5b u0 com.example.yanruzhang.bapplication/.BMainActivity t21459}
Task id #21458
* Hist #0: ActivityRecord{3a4e9f38 u0 com.example.yanruzhang.launchmodetestdemo/.MainActivity t21458}
|
|
4.1 | singleTop |
1.MainActivity設置launchMode=singleTask,並且是程序入口Activity
2.正常啓動BActivity(launchMode=standard),再正常啓動CActivity(launchMode=standard)
3.從CActivity啓動CActivity(launchMode=standard)
|
Task id #20894
* Hist #3: ActivityRecord{3cbfdf58 u0 com.example.yanruzhang.launchmodetestdemo/.CActivity t20894}
* Hist #2: ActivityRecord{3ef91c28 u0 com.example.yanruzhang.launchmodetestdemo/.CActivity t20894}
* Hist #1: ActivityRecord{145eb9c2 u0 com.example.yanruzhang.launchmodetestdemo/.BActivity t20894}
* Hist #0: ActivityRecord{211fb9d u0 com.example.yanruzhang.launchmodetestdemo/.MainActivity t20894}
|
|
4.2 | singleTop |
1.MainActivity設置launchMode=singleTask,並且是程序入口Activity
2.正常啓動BActivity(launchMode=standard),再正常啓動CActivity(launchMode=singleTop)
3.從CActivity啓動CActivity(launchMode=singleTop)
4.點擊返回鍵
|
步驟2之後:
Task id #20899
* Hist #2: ActivityRecord{238cd0e2 u0 com.example.yanruzhang.launchmodetestdemo/.CActivity t20899}
* Hist #1: ActivityRecord{248db264 u0 com.example.yanruzhang.launchmodetestdemo/.BActivity t20899}
* Hist #0: ActivityRecord{16549521 u0 com.example.yanruzhang.launchmodetestdemo/.MainActivity t20899}
步驟3之後:
Task id #20895
* Hist #2: ActivityRecord{3713f571 u0 com.example.yanruzhang.launchmodetestdemo/.CActivity t20895}
* Hist #1: ActivityRecord{1bc44ac9 u0 com.example.yanruzhang.launchmodetestdemo/.BActivity t20895}
* Hist #0: ActivityRecord{36c4db0e u0 com.example.yanruzhang.launchmodetestdemo/.MainActivity t20895}
步驟4之後:
Task id #20899
* Hist #1: ActivityRecord{248db264 u0 com.example.yanruzhang.launchmodetestdemo/.BActivity t20899}
* Hist #0: ActivityRecord{16549521 u0 com.example.yanruzhang.launchmodetestdemo/.MainActivity t20899}
|
|
5.1 | singleInstance打開已經啓動的應用的activity |
1.MainActivity設置launchMode=singleTask,並且是程序入口Activity
2.正常啓動BActivity(launchMode=standard)
3.再啓動CActivity(launchMode=singleInstance)
4.從CActivity再啓動CActivity(launchMode=singleInstance)
5.CActivity再啓動DActivity(launchMode=standard)
6.點擊返回鍵
7.點擊返回鍵
8.點擊返回鍵
|
步驟3之後:
Task id #20942
* Hist #0: ActivityRecord{2b7d1cb7 u0 com.example.yanruzhang.launchmodetestdemo/.CActivity t20942}
Task id #20939
* Hist #1: ActivityRecord{353d6560 u0 com.example.yanruzhang.launchmodetestdemo/.BActivity t20939}
* Hist #0: ActivityRecord{20d65c47 u0 com.example.yanruzhang.launchmodetestdemo/.MainActivity t20939}
步驟4之後:
Task id #20942
* Hist #0: ActivityRecord{2b7d1cb7 u0 com.example.yanruzhang.launchmodetestdemo/.CActivity t20942}
Task id #20939
* Hist #1: ActivityRecord{353d6560 u0 com.example.yanruzhang.launchmodetestdemo/.BActivity t20939}
* Hist #0: ActivityRecord{20d65c47 u0 com.example.yanruzhang.launchmodetestdemo/.MainActivity t20939}
步驟5之後:
Task id #20945
* Hist #2: ActivityRecord{3ddd7b91 u0 com.example.yanruzhang.launchmodetestdemo/.DActivity t20945}
* Hist #1: ActivityRecord{2c867758 u0 com.example.yanruzhang.launchmodetestdemo/.BActivity t20945}
* Hist #0: ActivityRecord{4136f95 u0 com.example.yanruzhang.launchmodetestdemo/.MainActivity t20945}
Task id #20947
* Hist #0: ActivityRecord{a42a56e u0 com.example.yanruzhang.launchmodetestdemo/.CActivity t20947}
步驟6之後:
返回到了BActivity
Task id #20945
* Hist #1: ActivityRecord{2c867758 u0 com.example.yanruzhang.launchmodetestdemo/.BActivity t20945}
* Hist #0: ActivityRecord{4136f95 u0 com.example.yanruzhang.launchmodetestdemo/.MainActivity t20945}
Task id #20947
* Hist #0: ActivityRecord{a42a56e u0 com.example.yanruzhang.launchmodetestdemo/.CActivity t20947}
步驟7之後:
返回到了MainActivity
步驟8之後:
返回到了CActivity
|
|
6.1 | standard模式打開別處應用的activity |
1.從BApplication啓動BMainActivity(launchMode = singleTask)
2.從BMainActivity啓動BSecondActivity(launchMode=standard)
3.按Home鍵回到桌面
4.打開AApplication的AMainActivity(launchMode = singleTask)
5.從AMainActivity打開BApplication的BSecondActivity
6.按回退鍵
|
5步驟之後:
Task id #21476
* Hist #1: ActivityRecord{12110283 u0 com.example.yanruzhang.bapplication/.BSecondActivity t21476}
* Hist #0: ActivityRecord{1adf6ed0 u0 com.example.yanruzhang.launchmodetestdemo/.MainActivity t21476}
Task id #21475
* Hist #1: ActivityRecord{358cd107 u0 com.example.yanruzhang.bapplication/.BSecondActivity t21475}
* Hist #0: ActivityRecord{33f1e004 u0 com.example.yanruzhang.bapplication/.BMainActivity t21475}
6步驟之後:
Task id #21476
* Hist #0: ActivityRecord{1adf6ed0 u0 com.example.yanruzhang.launchmodetestdemo/.MainActivity t21476}
Task id #21475
* Hist #1: ActivityRecord{358cd107 u0 com.example.yanruzhang.bapplication/.BSecondActivity t21475}
* Hist #0: ActivityRecord{33f1e004 u0 com.example.yanruzhang.bapplication/.BMainActivity t21475}
|
|
6.2 | singleTask模式打開別處應用的activity |
1.從BApplication啓動BMainActivity(launchMode = singleTask)
2.從BMainActivity啓動BSecondActivity(launchMode=standard)
3.按Home鍵回到桌面
4.打開AApplication的AMainActivity(launchMode = singleTask)
5.從AMainActivity打開BApplication的BSecondActivity(launchMode = singleTask)
6.按回退鍵
|
步驟5之後:
Task id #21480
* Hist #2: ActivityRecord{2237549b u0 com.example.yanruzhang.bapplication/.BSecondActivity t21480}
* Hist #1: ActivityRecord{1c23859f u0 com.example.yanruzhang.bapplication/.BSecondActivity t21480}
* Hist #0: ActivityRecord{3eb92a8e u0 com.example.yanruzhang.bapplication/.BMainActivity t21480}
Task id #21481
* Hist #0: ActivityRecord{1b29b508 u0 com.example.yanruzhang.launchmodetestdemo/.MainActivity t21481}
步驟6之後:
Task id #21480
* Hist #1: ActivityRecord{1c23859f u0 com.example.yanruzhang.bapplication/.BSecondActivity t21480}
* Hist #0: ActivityRecord{3eb92a8e u0 com.example.yanruzhang.bapplication/.BMainActivity t21480}
Task id #21481
* Hist #0: ActivityRecord{1b29b508 u0 com.example.yanruzhang.launchmodetestdemo/.MainActivity t21481}
|
|
6.3 | singleTask模式帶task Affinity打開別處應用的activity |
1.從BApplication啓動BMainActivity(launchMode = singleTask)
2.從BMainActivity啓動BSecondActivity(launchMode=standard)
3.按Home鍵回到桌面
4.打開AApplication的AMainActivity(launchMode = singleTask)
5.從AMainActivity打開BApplication的BSecondActivity(launchMode = singleTask,taskAfinity=“application A的包名")
6.按回退鍵
|
步驟5之後:
Task id #21486
* Hist #1: ActivityRecord{32e36ce1 u0 com.example.yanruzhang.bapplication/.BSecondActivity t21486}
* Hist #0: ActivityRecord{14874571 u0 com.example.yanruzhang.launchmodetestdemo/.MainActivity t21486}
Task id #21485
* Hist #1: ActivityRecord{1ce81a85 u0 com.example.yanruzhang.bapplication/.BSecondActivity t21485}
* Hist #0: ActivityRecord{2ce4f92a u0 com.example.yanruzhang.bapplication/.BMainActivity t21485}
步驟6之後:
Task id #21486
* Hist #0: ActivityRecord{14874571 u0 com.example.yanruzhang.launchmodetestdemo/.MainActivity t21486}
Task id #21485
* Hist #1: ActivityRecord{1ce81a85 u0 com.example.yanruzhang.bapplication/.BSecondActivity t21485}
* Hist #0: ActivityRecord{2ce4f92a u0 com.example.yanruzhang.bapplication/.BMainActivity t21485}
|
BY 張燕茹