2011-11-17 71 views
6

使用Android 2.1+。我有一個服務不時被操作系統殺死(由於內存壓力,我猜)。殺死Android服務和靜態變量

該服務維護一些使用類的靜態成員字段的狀態。我期望靜態字段保持其值,儘管該服務被殺死並由操作系統重新啓動。

但是,它似乎並沒有像這樣發生。重新啓動後,靜態變量將重置爲默認值。 這是應該發生的事情嗎?我應該使用另一種方式來保持持續狀態,儘管殺死/重啓?

回答

6

是的,這是當你的服務被殺時發生的事情。該程序被取出內存,並且當它被重新加載到內存中時,靜態變量的默認值都被假定。換句話說,程序的字節碼不能從執行到執行。

通常認爲使用靜態變量來保持狀態是不好的。嘗試將它們存儲在預先存儲中,如sqlite數據庫。

+1

我還指定,因爲靜態字段被重置,這意味着OS會殺死整個應用Java進程。是的,這是不時發生,檢查這篇文章 - http://stackoverflow.com/questions/708012/android-how-to-declare-global-variables/4642069#4642069 –

+1

Android真的沒有提供保持持久性的手段狀態比寫每次閃光? (例如,onDestroy不保證被調用!!!?)我的服務改變狀態一個LOT,這將增加電池的使用,並加快閃光的磨損,如果我不得不觸摸閃光燈每次狀態改變! – Michael

+0

@Michael從[onDestroy方法的文檔](https://developer.android.com/reference/android/app/Activity.html#onDestroy()): 注意:不要指望這個方法被稱爲一個保存數據的地方!例如,如果一個活動正在編輯內容提供者中的數據,那麼這些編輯應該在onPause()或onSaveInstanceState(Bundle)中提交,而不是在這裏。 –