2014-12-03 63 views
1

假設有兩個活動:
1. 活動A(啓動活動)
2. 活動B啓動活動不從最近應用發起


當從啓動活動B活動A,我完成了活動A

startActivity(new Intent(A.this, B.class)); 
finish(); 

。如果退出按鈕從活動B,則活動B點擊拿完。

ExitButton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       finish(); 
      } 
     }); 

因此,假設活動B得到來自活動A啓動,我得到活動B(或退出應用程序)的出口。有2個選項,從那裏的應用程序來啓動:
1.啓動器圖標
2.從最近訪問的應用

現在,如果應用程序從啓動器圖標推出,然後活動A得到啓動。但如果應用程序從啓動最近的應用程序,然後活動B啓動。


我認爲,活動B留在堆棧,即使我電話完成()它。
我的問題是:如何在應用程序退出時清除堆棧?在安卓2.3.6版

+0

簡單的答案:你不能這是一個Android設計,關於這個問題有幾個關於Stackoverflow的問題和答案。是一些奇怪的解決方案,但他們都不是真正的工作或100%的API一致 – brummfondel 2014-12-03 09:37:04

+0

我認爲你直接從活動A開始活動B,沒有任何輸入,也關閉活動A,所以當你從最近啓動應用程序可能看起來像活動B將直接顯示,而不是活動A. – 2014-12-03 09:37:35

+0

另一種解決方案可能是使用片段,在onCreate()設置您的默認片段 – 2014-12-03 09:40:26

回答

1

經測試除了使用片段我上面提到的解決方案,你也可以嘗試在AndroidManifest寫android:excludeFromRecents爲您的活動

安卓excludeFromRecents

無論是否應從最近使用的應用程序列表(總覽屏幕)中排除此活動啓動的任務 。 是,當此活動是新任務的根活動時,此 屬性確定該任務是否不應出現在最近的應用程序的列表中 。如果任務應該從列表中排除,則設置「true」; 如果應該包含它,則設置爲「false」。默認值是「假」

編輯

如果按照上面可能是您的MainActivity也從最近的活動消失,因爲默認情況下的應用程序的所有活動都有相同的親和力。要指定一個不同的任務使用android:taskAffinity爲其文檔說

安卓taskAffinity

活動具有親和力的任務。具有 相同親和性的活動在概念上屬於同一任務(從用戶的角度來看同一個 「應用程序」)。任務的親和力由其根活動的親和力決定,爲 。

的親和力決定了兩件事情 - 該活動是 重新父當它與 FLAG_ACTIVITY_NEW_TASK標誌推出,將容納活動任務(見allowTaskReparenting屬性)和任務 。

默認情況下,應用程序中的所有活動都具有相同的關聯性。 您可以設置此屬性以不同方式對它們進行分組,甚至可以在同一任務中的不同應用程序中定義的活動。若要 指定該活動不具有任何任務的關聯性,請將其設置爲空字符串 。

如果未設置此屬性,則該活動會繼承應用程序的關聯集合 (請參閱元素的taskAffinity 屬性)。應用程序的默認關聯名稱是該元素設置的包名稱 。

+0

這不是一個完美的解決方案,因爲我從最近的應用程序中刪除應用程序。其他活動。 另外我不會去片段,我想保持我的代碼笑rt和乾淨。感謝您的回覆:) – 2014-12-03 10:28:34

2

您可以在AndroidManifest.xml文件中爲您MainActivity設置android:clearTaskOnLaunch =「true」屬性。我認爲這是滿足您需求的最便捷方式。

我剛剛測試過,發現這隻適用於退出應用程序並從應用程序抽屜中啓動應用程序(不要長按HOME並選擇應用程序)。

如果您想始終將根活動置於前端,無論何時重新啓動應用程序或從最近的屏幕啓動。你可以聲明「android:launchMode =」singleTask「作爲根活動,這裏是MainActivity。

+0

我無法使用此標籤「clearTaskOnLaunch」,每次我重新啓動應用程序時,它都將刪除所有後退活動。我只需要處理最近使用的應用程序。感謝您的回覆:) – 2014-12-03 12:55:31

+0

它不工作...我有兩個活動A和B ...我從推送通知啓動活動A(不是我的啓動器活動),從那裏我去活動B並完成活動A,然後我壓倒了活動A.該應用程序已退出,因爲它應該因爲活動A已經完成。當用戶從最近的任務活動B打開應用程序時,但我已經壓倒了活動B,因此活動中不應該有任何活動,因此我的splashscrreen應該打開...幫助我 – 2017-04-05 22:40:26