Android的四種啓動模式Standard、SingleTask、SingleTop、SingleInstance及其做用這裏就不講述了,這個屬於基礎中的基礎,我當作你們已經知道了。這裏惟一可能存在疑問的就是singleInstance,因此本文經過具體的代碼示例來演示不一樣啓動模式的Activity相互跳轉的時候Task棧的使用狀況。android
咱們這裏建立以下幾個Activity,見名知意,他們的啓動模式就和文件名是同樣的。shell
<activity android:name=".SingleInstanceActivity2" android:launchMode="singleInstance"/>
<activity android:name=".SingleTopActivity" android:launchMode="singleTop"/>
<activity android:name=".SingleTaskActivity" android:launchMode="singleTask" />
<activity android:name=".SingleInstanceActivity" android:launchMode="singleInstance" />
<activity android:name=".StandardActivity" android:launchMode="standard" />
<activity android:name=".MainActivity" android:launchMode="standard">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
複製代碼
MainActivity啓動了是SingleInstanceActivity,而後在SingleInstanceActivity中再次啓動MainActivity,此時會怎樣?點擊返回返回到哪兒呢?spa
查看task棧狀況命令行
在cmd命令行裏或者Android Studio中的Terminal裏敲入以下命令:3d
adb shell dumpsys activity
複製代碼
點擊返回鍵出棧:code
咱們發現,它的順序是MainActivity->MainActivity->SingleInstanceActivity。咱們能夠看到規律,它是先將一個棧都清空以後再去清空第二個棧。cdn
MainActivity啓動了是SingleInstanceActivity,而後在SingleInstanceActivity中再次啓動SingleTaskActivity,此時會怎樣?點擊返回返回到哪兒呢?xml
查看task棧狀況blog
點擊返回鍵出棧:cmd
咱們發現,它的順序是SingleTaskActivity->MainActivity->SingleInstanceActivity。咱們能夠看到規律,它是先將一個棧都清空以後再去清空第二個棧。
MainActivity啓動了是SingleInstanceActivity,而後在SingleInstanceActivity中再次啓動SingleTopActivity,此時會怎樣?點擊返回返回到哪兒呢?
查看task棧狀況
點擊返回鍵出棧:
咱們發現,它的順序是SingleTopActivity->MainActivity->SingleInstanceActivity。咱們能夠看到規律,它是先將一個棧都清空以後再去清空第二個棧。
MainActivity啓動了是SingleInstanceActivity,而後在SingleInstanceActivity中再次啓動SingleInstanceActivity2,而後在SingleInstanceActivity2中再次啓動StandardActivity,此時會怎樣?點擊返回返回到哪兒呢?
查看task棧狀況
點擊返回鍵出棧:
咱們發現,它的順序是StandardActivity->MainActivity->SingleInstanceActivity2->SingleInstanceActivity。咱們能夠看到規律,它是先將一個棧都清空以後再去清空第二個棧,而後再去清空第三個棧。
1.Standard、SingleTask、SingleTop模式的Activity會放在同一個Task棧中,其餘每個SingleInstance會單獨放在一個棧中
3.每次建立一個不一樣的SingleInstance模式的Activity,都會從新建立一個Task棧來放這個Activity。
3.出棧的時候看當前棧是哪一個,當前棧出棧完畢以後再讓第二個棧出棧。