5

我有沒有被系統終止活動(A,B,C)我Application.When i內啓動應用程序 活動答:問題與活動,如果不再顯示在Android的

A:onCreate() 
    A:onStart() 
    A:onResume() 

使用意圖我是調用第二項活動(A - > B):

A:onPause() 
    B:onCreate() 
    B:onStart() 
    B:onResume() 
    A:onStop() 

然後我點擊 「主頁」 按鈕,這樣的應用程序切換到後臺:現在

B:onPause() 
    B:onStop() 

1或2小時後,再後我會去的主頁我的設備中,並點擊它運行一樣的應用圖標:

B:onDestroy() 
A:onRestart() 
A:onStart() 
A:onResume() 

,但我需要走哪一個活動我不幹這個樣子,

B:onRestart() 
B:onStart() 
B:onResume() 

我看了一些文章,它說這樣的活動由因爲不再visible.Is有任何可能的系統殺死解決我的問題...提前

謝謝...

+0

你可以發佈你的活動A和B的代碼嗎? – Dharmendra 2012-07-26 11:37:29

回答

6

您可以在這裏混淆了兩個不同的東西:如果它需要的內存

  1. Android不殺死一個活動。它所做的是殺死整個活動正在運行的進程。通常,這意味着Android在這種情況下會殺死所有您的活動。但是,它會記住活動堆棧以及用戶何時返回到應用程序,Android將創建一個新進程,然後重新創建每個活動(依需要進行)。它首先重新創建活動堆棧頂部的活動(即:用戶離開應用程序的位置)。

  2. Android的假設是,如果用戶離開任務爲很長一段時間(我認爲這是一樣的東西30分鐘),那麼他就不再感興趣的是任務,沒有一點回憶當時在用戶處於該任務的活動堆棧中,因爲他可能不在乎了。在這種情況下,當用戶返回任務(或重新啓動該任務中活動堆棧頂部的應用程序)時,Android會簡單地將清除回到根活動。這有一個效果,看起來應用程序是從頭再來。這是所需的(並且記錄下來的行爲)。

你想要做的是阻止Android清除situarion#2中的任務。您可以通過添加

android:alwaysRetainTaskState="true" 

根系活力(:啓動應用程序時,一個與ACTION_MAINCATEGORY_LAUNCHER活動IE)的<activity>標籤做到這一點。

+0

哦,非常感謝你爲你的整潔的解釋大衛.... – Srinivasan 2012-07-27 05:15:42

1

我不相信這是你可以控制的東西。如果您的活動處於後臺很長時間,同時其他應用程序需要內存,則系統將終止您的活動以釋放內存。

+0

是的,我知道安迪,但我的客戶的要求是應該重新啓動哪一個我退出...但一些應用程序保持這樣我不知道如何? – Srinivasan 2012-07-26 08:46:31

+1

然後我相信你應該考慮做一個自定義的實現。例如,每次打開活動B時,都會在onCreate()中寫入SharedPreferences中的標誌,並在onDestroy()上刪除該標誌。 現在當活動A開始時,請檢查該標誌的SharedPreferences。如果標誌被設置,這意味着活動B被打開,但是系統殺死了她(因爲id沒有通過onDestroy()來通過刪除該標誌),因此,從那裏將用戶重定向到活動B.如果沒有設置標誌,則什麼也不做。這是一個想法... – 2012-07-26 08:55:10

+0

但是,這也是從第二個Activity的onCreate(),所以它不會保留任何值。 – Srinivasan 2012-07-26 09:30:56