2012-09-24 46 views
0

我有一個應用程序在我的應用程序類中保存一些對象以供全局使用。 我不想讓應用程序類被殺害(因爲我需要它被保存在它的信息),所以我已經覆蓋onLowMemory()功能,使一個Thread.sleep(1000)android應用程序類onLowMemory

會發生什麼,當應用程序類都會驚醒如果內存仍然很低?將再次調用onLowMemory()?

只要我的應用程序和它的後臺服務正在運行,什麼是正確的架構來確保這個Application類不會被系統殺死?

+0

根據定義,只要我的應用程序和後臺服務正在運行,您的應用程序實例「不會被系統殺死」。 Application對象在進程的整個生命週期中都存在。然而,Android可以隨時終止您的流程,出於任何原因,這將擺脫您的後臺服務和您的應用程序實例。 – CommonsWare

+0

我有一個使用應用程序的STICKY後臺服務。我如何確定應用程序是否在重新加載背景時被重新加載,還是它是原始應用程序? –

+0

更準確 - 我如何知道我的後臺服務是否已被終止並重新創建,以便重新初始化我的應用程序對象中的變量? –

回答

2

不要這樣做!

  1. 不會阻止系統調用
  2. 不阻止系統殺死你的應用
  3. 內存仍然是低

沒有辦法,以確保您的應用程序不會被殺死。將數據保存到共享首選項,文件或sqlite數據庫中,無論哪個都適合您的需求,但不要依賴應用程序實例。

0

你不應該相信被調用的函數。 Android可以在任何需要的時候殺死你的應用程序,只要它在後臺,並且你不能阻止他甚至嘗試。它可能會調用該函數,以便您的應用程序可以清除一些緩存或執行任何可以釋放內存的操作。這可以從文檔中得出結論。

http://developer.android.com/reference/android/app/Application.html#onLowMemory()

儘量避免依賴於它。盡一切可能準備您的申請,以便開啓OnPauseOnStoponDestroy或確定會被調用的類似方法。這意味着保存變量,數據或對文件或數據庫重要的任何其他內容。