2016-06-29 27 views
1

我知道,在Android系統中,如果有一段時間閒置,操作系統會吞噬東西來釋放內存。如果我通過Intents創建了新的活動,以前的活動會在以後繼續嗎?

因此,如果我有第一個Activity,然後使用Intent調用第二個Activity,然後使用另一個Intent調用第三個Activity,則可以使用後退按鈕返回到以前的Activities。

但是,讓我們說我留在第三個活動,並讓手機閒置一段時間,直到操作系統決定吞噬我的應用程序的內存。如果我再次打開應用程序,我會失去從我的意圖中形成的堆棧嗎?我是否仍然在第三項活動中,能夠按下返回,然後轉到活動2,然後轉到活動1?

+0

OS負責調用生命週期方法。如果內存不足,它可能會殺死一些未被使用的活動。 – Vucko

+0

這是我的問題。第三項活動有可能會回來,但前兩項活動會不見了,所以我會被「擱淺」,無法按回來回到之前的活動? – user6419910

+0

@ user6419910是可能的,你可以在將來的activites或'moveTaskToBack'中禁用後退鍵,或者你可以指定啓動模式,你可以閱讀這個頁面:[android manifest activity elements](https://developer.android.com/指南/主題/清單/活動,element.html) –

回答

0

操作系統將處理特定活動在內存中保持「活動」狀態的時間。但是,不管活動是否「活躍」,「堆疊」都不應改變。這就是Bundle派上用場的方法:「onSaveInstanceState()」和「onRestoreInstanceState()」。

正確實施這些方法是在屏幕上以空狀態重新出現的活動與保持其先前狀態的活動的差異。

Recreating an Activity

+0

我熟悉保存和恢復實例狀態,但我怎麼應用到我提到的情況? – user6419910

+0

根據我的經驗,堆棧仍然「完好無損」。由於操作系統可能殺死了活動1和2,顯示3,所以當你點擊「返回」時,它將使用存儲的包重新創建活動2。然後再次點擊將重新創建活動1與其存儲的包 – FishStix

+0

當你說存儲包,這是你必須直接實現或Android是否處理這個? – user6419910

0

返回堆棧有些文檔保持不變爲手頭的任務。它將始終保持在任務中,並且每當用戶按下後退按鈕時,它將像彈出最後一個項目一樣通過後退堆棧。但是,並非堆棧中的所有活動都處於前臺。通常情況下,只有放入後端堆棧的最後一個項目(堆棧的頂端)位於前臺,如果有多個應用程序/任務打開,這可能不是真的。這是一個很棒的圖表來展示這一點。 Activity back stack

現在,讓我們說一個用戶在後面的堆棧中通過一些活動打開一個任務。頂級活動位於前臺並正常運行,但爲了保留內存,其他活動已被銷燬。所以,現在當用戶按下後退按鈕時,任務知道後退堆棧中的活動,並知道現在已經銷燬。所以,它將在活動生命週期之後重新創建它,並且其中的任何數據都將丟失。一種方法來保存它(通過原始的答案提到)是使用onSaveInstanceState()onRestoreInstanceState(),這些東西保存在Android爲用戶保存的包中,因此可以保存數據。所有這些信息都可以在docs中找到。爲了更清楚地回答你的問題,是的,你會參加你認爲你會參加的活動,但是你可以把它當作活動的一個新實例,並從以前恢復數據以相同的方式顯示它,你應該使用包並實現上述方法。

相關問題