我有一個Android應用程序(活動),它也具有相應的服務。該服務由活動啓動,即使活動停止,也應該連續運行。當活動再次啓動時,它可以綁定到服務並進行查詢。由於堆碎片導致服務崩潰的Android活動
有時活動會被操作系統破壞和創建。這不應該影響事物,應該重新創建活動並且能夠再次綁定到服務。這基本上工作。
但是......
我發現,無論是Dalvik虛擬機堆和本地堆是不可壓制成型和規模因此不斷增加,直到活動運行的內存和崩潰(即使總內存用量實際上是不變的,不會泄漏)。由於在創建過程中進行了大量分配,因此通過銷燬和重新創建活動而加劇了這種情況。
這幾乎可以保證活動在多次重新啓動後都會崩潰。這並不會影響我,但是接下來發生的事情是該服務也會崩潰,因爲它是同一應用程序的一部分。該服務包含一些重要數據,然後在崩潰期間丟失。
我對如何解決這個問題有什麼建議感興趣?
有沒有辦法將服務與活動分開(這樣當活動崩潰時它不會使服務崩潰),但仍然在同一應用程序中具有服務和活動?
我可以堅持服務數據,但這需要對數據庫進行多次訪問,並且不利於節省電池。
我需要的服務,既啓動並裝訂成冊,我的確叫unbindService()。我認爲問題在於,因爲服務仍在運行(這是打算的),那麼當前堆仍保持活動狀態。當活動重新啓動時,它將使用與服務相同的堆,現在該服務嚴重分散。 – chris 2012-02-26 23:40:02
@chris - 您可以通過在您的服務中指定['android:process'](http://developer.android.com/guide/topics/manifest/service-element.html#proc)值來測試您的假設表現。這將使服務與應用程序的活動分開進行。 – 2012-02-26 23:46:08