2012-10-19 74 views
0

我有2項活動。主要活動A &活動B 我不希望活動A銷燬。我正在開始一項新任務的活動B.暫停/恢復活動以外的活動

public static void startActivity(Class<?> startClass) { 
    Intent intent = new Intent(Constants.getActivity(), startClass); 
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    Constants.getActivity().startActivity(intent); 
}` 
  • Constants.getActivity()返回關於當前活動的上下文
  • startClass是任一活性 「A」 或活性 「B」

的是他們創建/銷燬活動他們泄漏。我做錯了嗎?我如何從活動「A」開始活動「B」,反之亦然,當我不需要它們時,將它們放在背景中。

+0

你想讓他們保持背景麼? – Egor

+0

檢查意向標誌...這將解決您的問題。 – ArulRaj

回答

0

當您使用任務時,清理非常重要。您需要清理活動中的所有任務。 readthis

如果活動沒有很多瘋狂的初始化,只需使用finish和onCreates。否則請注意,您在活動之間切換時,會經常調用onResume。清理工作在這裏至關重要。如果你不清理,它可能的一個活動(來自其他清理活動的死對象引用)可能會從活動棧回來並拋出異常。它很難調試這種有點例外。

+0

你好。感謝您編輯我的帖子。我的文章背後的想法是,即時通訊工作在運行Android的嵌入式系統上。沒有「返回」按鈕,活動之間的變化由GPIO完成。天氣GPIO是0或1,活動改變。在我的應用程序中,我有另一個讀取GPIO值的類,並根據它們的值執行某些功能。我發佈在我的原始帖子中的功能之一。我想知道的是天氣是可能的,以保持兩個活動「活着」,只是在背景/前景之間切換。 –

+0

不,你不能。我給你兩個可能的選擇:1)你可以使用片段來改變UI並保持活動,並且活動接收來自GPIO的回調。 2)創建一個保持對GPIO更改的偵聽器的引用的單例。每個活動都實現了監聽器接口,並將onPause/onResume註冊/取消註冊爲新監聽器。 – Budius

0

首先,你想要做什麼?您應該始終將您想要在背景中執行的操作從您的用戶界面中分離出來。想想你的活動只是一個顯示UI的容器,其他所有東西都可以從持久存儲或已保存的實例包中存儲和恢復。

您瞭解活動生命週期與服務生命週期之間的區別非常重要。

我會從這裏另外一個問題是指我的答案:

Your app will be in the background, onResume and onPause will both be called,前提是操作系統有足夠的內存,以保持新的應用程序,所有的舊應用程序。

  • 如果您有一個長時間運行的過程,而您在用戶沒有查看它時需要使用服務。

  • 如果您需要用戶以相同狀態返回應用程序,請返回you need to do the work in onResume and onPause to save the state information and initialize your UI again。如果你真的擔心它會被殺死(當然,它不應該丟失我認爲的包),你可以將它們存儲在你的應用的SharePreferences中。

  • 如果你想知道什麼時候從該特定份額的意圖應用的回報,使用startActivityForResult