嗨我們在android應用程序中遇到了一個奇怪的問題。在我們的應用程序中,當我們啓動應用程序(第一個活動)時,我們將所有需要的對象/數據存儲在Common對象中(稱爲對象A)。我們將上下文本身存儲在該對象中。每當我們在應用程序中需要上下文時,我們都會從對象A獲取上下文並使用它。除以下情況外,所有情況都很好。
i)當我們的應用程序在後臺,我們玩了一些高端遊戲。現在我們通過最小化屏幕回到應用程序(最近的應用程序)。突然,該應用程序崩潰。
ii)如果我們通過設置強制停止應用程序,並通過最小化屏幕回到應用程序,則會發生相同的崩潰。對象變爲空
這兩種情況下,對象A都變爲空(它可能會被GC刪除),所以所有依賴於對象A的操作都會獲取異常。
爲什麼會發生?我們如何阻止GC收集對象A?我們如何處理停止使用武力?請給出任何想法。
您不能強制GC或系統殺死您的進程。在這種情況下,您應該找到一種序列化/反序列化對象的方法。 –
這可能是編寫Android應用程序時應該瞭解的最重要的概念。 http://developer.android.com/training/basics/activity-lifecycle/index.html – Kuffs
Android(實際上,Dalvik)不會GC單個對象,除非您的應用程序正在運行並且沒有對它的引用。我不知道這個神話在哪裏開始。你的**應用程序**可能會被殺死,在這種情況下,它全部從頭開始。如果您需要保存狀態,請使用'onPause()'和/或'onStop()'進行序列化。請注意,'onDestroy()'只有在完成()一個活動時纔有用。順便說一句,如果你存儲的'context'是一個'Activity'上下文,那麼你做的全部都是錯誤的。 – Simon