對於Android的Activity啓動模式的一些總結和理解

安卓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的時機和內容的影響

StartActivityForResult的時候,requestCode必須>0,否則收不到result

startActivityForResultsingleInstance啓動的對象的影響。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 張燕茹

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章