2011-05-16 86 views
5

我有一個圍繞主要活動(主菜單)的應用程序。在每個其他應用程序中都有一個指向此活動的選項菜單項。Android:launchMode = SingleTask問題

起初,我總是開始了一個新的主要活動是選擇該項目時。通過使用意向包,我確實告訴了主要的活動,我不需要重新開始一些初始化。

不過,我不太喜歡的整體行爲。我偶然發現了android:launchMode="SingleTask",這似乎有所幫助:現在我不會一直重新創建我的主菜單活動;另外,如果我按下「返回」按鈕,我會直接回到主屏幕。這感覺很像一個適當的「主」菜單。

我的問題現在是這樣的:如果我運行我的應用程序的另一個活動,按主頁按鈕,然後重新打開我的應用程序(例如使用「最後的應用程序」),然後我不回到最後一個活動,但主要的一個。其他活動被破壞。

任何想法如何,我可以實現的SingleTask沒有隻能夠恢復到一個活動的行爲?

+0

很高興你找到了解決你的問題。對於未來的讀者,我認爲這裏的根本原因與接受的答案沒有關係,但實際上這裏解釋了「錯誤」:http://stackoverflow.com/questions/2417468/android-bug-in-launchmode-singletask - 活動棧未保存 – eselk 2015-06-22 23:10:05

回答

3

如果你的其他活動,在Android的活性違約宣佈正常,然後回到你的應用程序應該帶你到你離開了相同的活動(使用硬件home鍵)

但是記住,Android系統的應用程序殺死時需要的系統資源。所以當你去其他應用程序時,你的應用程序可能已被殺死。然後,當你回到你的應用程序,默認的啓動器活動將重新啓動,這是你的菜單活動。

要回到從任何活動的主要活動,這樣做:

public static void goHome(Context context) { 
     final Intent intent = new Intent(context, HomeActivity.class); //give name of your main activity class here 
     intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     context.startActivity(intent); 
    } 

這將清除活動堆棧,讓你回到你的主要活動。正如你所聲明的singleTop,它將把現有的主要活動帶到前臺。 Intent.FLAG_ACTIVITY_CLEAR_TOP標誌將刪除堆棧中主活動頂部的所有活動。 (我假設你在同一個應用程序中)。

現在,您的所有其他活動只需要包括一個按鈕,其點擊監聽器調用方法goHome();

從您的主要活動,如果按硬件後退按鈕,它應該退出你的應用程序。

+1

我實際上想要有正常的行爲。但是,如果我聲明我的主要活動爲單一任務,則按下我的主頁按鈕後,其他活動就會被銷燬。我想要實現的是a)通過菜單快速鏈接到主要活動,而不重新創建主應用程序,b)通過按主活動中的後退按鈕「關閉」整個應用程序。 (關閉意味着與主頁按鈕相同的效果)。但是,b)只是一個好主意,所以我主要想實現a)。 :-) – jellyfish 2011-05-16 13:31:07

+0

現在我明白你的意思了。看到我上面編輯的答案。請務必說清楚您是在討論硬件後退按鈕還是軟件後退按鈕。 – codinguser 2011-05-16 14:07:22

+0

非常感謝你!那正是我所期待的。我也會記住你將來的建議。 :-) – jellyfish 2011-05-16 14:20:53

0

爲什麼不叫由主要活動創建的活動結束()?這樣,您返回到主活動,而無需創建一個新的...

+0

聽起來不錯,但後來我有時會在我的實際活動和我的主要活動之間進行多項活動。有什麼方法可以關閉所有的? – jellyfish 2011-05-16 13:16:33

+0

可能有更好的解決方案,但是當onActivityResult被調用時,您可以通過調用finish()來關閉這些活動。您可以在頂部活動上設置一些結果標誌,例如「CLOSE」,底層活動將處理結束標誌。它會這樣,A創建B,創建C.現在C調用結果「CLOSE」結束,B獲得onActivityResult中的結果代碼並通過調用finish來關閉自己。 – 2011-05-16 13:29:35

+0

我明白了,謝謝。我會試試這個。 :-) – jellyfish 2011-05-16 13:37:58

相關問題