2011-05-12 87 views
39

我有一個啓動畫面活動,然後登錄活動。我的歷史堆棧的樣子:清除任務中的所有活動?

SplashActivity 
LoginActivity 

當用戶通過LoginActivity成功登錄,我要開始WelcomeActivity,但清除整個堆棧:

SplashActivity 
LoginActivity // launches WelcomeActivity -> 
WelcomeActivity 

// but now all three are in the history stack, while I only 
// want WelcomeActivity in the stack at this point. 

有一些標誌,我可以用做那?

// LoginActivity.java 
Intent intent = new Intent(this, WelcomeActivity.class); 
intent.addFlag(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
startActivity(intent); 
finish(); 

不知道是否使用FLAG_ACTIVITY_CLEAR_TASK會清除所有活動,我的任務或沒有。我可以通過使用startActivityForResult()調用展開堆棧來「手動」執行此操作,但會更脆弱並需要更多代碼進行維護。

謝謝

+2

「不知道是否使用FLAG_ACTIVITY_CLEAR_TASK將清除出在我的任務與否的所有活動。」 - 使用BACK按鈕並親自查看。如果您可以使用BACK按鈕回到以前的活動,那麼他們仍然在後臺。 – 2013-02-19 13:12:10

+1

答案是使用'FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK',不是嗎? – 2014-03-31 09:53:46

+0

代碼中有一個錯字...它應該是'.addFlags(...)'而不是'.addFlag'。 – Developer 2015-06-07 23:02:39

回答

38

是的,應該工作正常。你可以使用:

  • FLAG_ACTIVITY_CLEAR_TOP
  • FLAG_ACTIVITY_SINGLE_TOP
  • FLAG_ACTIVITY_CLEAR_TASK
  • FLAG_ACTIVITY_NEW_TASK

保證,如果一個實例已在運行,而不是頂部,然後在它上面的任何東西會清除,它會被使用,而不是開始一個新的實例(這是有用的,一旦你已經離開歡迎活動 - >活動A,然後你想獲得b ack to A歡迎,但額外的標誌不應該影響你的情況)。

+12

請注意,您需要使用FLAG_ACTIVITY_NEW_TASK和FLAG_ACTIVITY_CLEAR_TASK。 – Femi 2011-05-12 14:18:18

+0

是的,我的不好,我通常只使用'NEW_TASK'。修改後進行編輯。 – 2011-05-12 14:19:46

+0

一切都很好:甚至沒有意識到他們有CLEAR_TASK,所以去看了看。它很高興知道。 – Femi 2011-05-12 14:21:17

6

Intent.FLAG_ACTIVITY_NO_HISTORY也可以用於您的情況,如果您不希望歷史堆棧上的活動。

8

finish()從堆棧中刪除活動。所以,如果您啓動了LoginActivity並在SplashActivity上調用finish(),然後確實執行相同的步驟啓動WelcomeActivity,您將獲得所需的行爲。不需要使用額外的標誌。

+0

這可以工作,並且似乎是2.3的最乾淨的解決方案。謝謝!對於低於11的API, – jskierbi 2014-04-15 16:21:37

8

使用android:noHistory="true"清單文件中的飛濺活動。

<activity 
android:name=".activity.SplashActivity" 
android:theme="@style/theme_noActionBar" 
android:noHistory="true"> 
+0

不起作用 – 2014-12-05 13:16:57

4
Intent intent = new Intent(this, NextActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | 
        IntentCompat.FLAG_ACTIVITY_CLEAR_TASK); 
startActivity(intent); 
0
  • 在情況下,所有三個活動的參與了相同的應用程序(相同taskAffinity),可以挑1,2或3任一以下。否則你應該選擇下面的1,2。

    1. 如果你不想從LoginActivity返回回SplashActivity,您可以定義:活動屬性noHistory在AndroidManifest.xml中,也可以設置成FLAG_ACTIVITY_NO_HISTORY的意圖發動SplashActivity。如果SplashActivity從Launcher啓動,您應該選擇設置活動屬性noHistory的方式。

    2. 如果您不想從WelcomeActivity返回LoginActivity,那麼您可以使用上述第1項的活動屬性noHistory或FLAG_ACTIVITY_NO_HISTORY。

    3. 如果你想清除回棧上的具體情況,你可以與FLAG_ACTIVITY_NEW_TASK一起使用FLAG_ACTIVITY_CLEAR_TASK(FLAG_ACTIVITY_CLEAR_TASK總是必須配合使用FLAG_ACTIVITY_NEW_TASK)。但是,如果正在啓動的活動涉及其他應用程序(即不同的taskAffinity),則該任務將在清除任務後啓動其他任務,而不是當前任務。因此請確保正在啓動的活動涉及相同的應用程序(taskAffinity)。

相關問題