2010-11-09 32 views
10

我使用我的Android應用程序的應用程序上下文作爲我的應用程序的「當前狀態」信息的存儲區域。Android應用程序上下文是否被破壞?

我發現在這個領域,有些情況下這些信息會在某些人的設備上消失,導致各種NullPointerException異常,因爲我希望當應用程序恢復並開始重建必要的活動時,數據就在那裏。

這通常發生在用戶點擊「Home」,執行其他操作時,最終回到應用程序 - 它試圖回到以前的位置,但應用程序Context已經神祕地丟失了之前保存的所有內容狀態信息(在我的情況下,一些整數和一些字符串)。

我知道這是一個非常模糊的問題,但是有沒有任何情況(除了用戶使用「back」完全退出應用程序)應用程序上下文被完全銷燬,即使應用程序未終止?

有更好的方法來維護持久狀態信息嗎?

回答

4

是的,如果用戶離開應用程序一段時間,應用程序可能會被終止並重新啓動。您可能需要閱讀有關processes and lifecycles的此部分。

您應該找到一個合適的位置將狀態保存到持久存儲區。如果只包含一些整數和字符串,那麼當它們改變時將它們保存爲共享首選項應該非常簡單。請參閱data storage - shared preferences

+0

我想的很多。有什麼具體的,我可以做*迫使*這種情況下(我的應用程序被殺害),所以我可以重現它?它顯然在現場發生了很多,但我從未能在本地Nexus One上重現過它。在這種情況下onTerminate()然後調用應用程序進程? – user435210 2010-11-09 16:52:16

+0

@ user435210 1.查看包含應用程序生命週期的頁面 - 它解釋了爲管理應用程序生命週期所需瞭解的幾乎所有內容。 2.您可以通過進入'設置/應用程序/管理應用程序/您的應用程序'或通過使用Android市場上可下載的任何應用程序來殺死您的應用程序。 – 2010-11-09 16:59:43

+1

如果你想以「友好」的方式重現它(不是強制殺死),我會打回家,然後啓動你可以在系統上找到的每個應用程序,這樣Android就會被迫關閉你的系統。正如它在文檔中指出的那樣,onTerminate可能會被調用,但這不是保證。舉例來說,如果您的應用程序因殺死所有應用程序應用程序而關閉,它很可能不會被調用。 – 2010-11-09 17:26:40

相關問題