3

我的服務通常是由項值一個BroadcastReceiver啓動,並與START_STICKY標誌實現如下:製作服務生命週期獨立於活動

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    return Service.START_STICKY; 
} 

因此在很多情況下,當用戶啓動應用程序時,服務將已在後臺運行。然後,我的活動將綁定到它以從服務中讀取信息。

但是,當用戶隨後使活動失效(通過終止應用程序),我已經運行的服務現在也被銷燬,然後通過start_sticky重新啓動。這會導致我在服務中保留的一些信息丟失。

有沒有辦法保存我的服務實例,並讓我的活動進出去,根據需要進行綁定?

+0

你或許可以用'#服務來onDestroy'實施清理和保存,否則你就失去了信息。請參閱:http://developer.android.com/reference/android/app/Service.html#onDestroy() – blad 2014-12-06 23:03:06

+0

「然後使活動(通過終止應用程序)失效」..用戶不能也不銷燬活動,也不終止應用程序。他/她所能做的就是完成活動。 Android將在未來的某個時間點調用onPause(),可能是onStop()或者Activity.onDestroy()。但是如果你的服務正在運行,應用程序不會被終止。 – rupps 2014-12-06 23:12:09

+0

@rupps:「用戶不能也不銷燬活動」 - 按BACK,默認情況下銷燬活動。 「也不終止應用程序」 - 我的解釋是,OP意味着「終止進程」,例如通過最近的任務列表。 – CommonsWare 2014-12-06 23:13:09

回答

2

沒有辦法確保服務(或應用程序的任何組件)不會被終止。如果你有需要堅持的數據,你可以使用任何這些技術。

http://developer.android.com/guide/topics/data/data-storage.html

SharedPerferences是很容易使用。

以下是開發人員文檔(和鏈接)中說明應用程序如何由系統啓動和停止的部分。

默認情況下,每個應用程序都在其自己的Linux進程中運行。 Android在啓動 時需要執行任何應用程序的組件,然後 關閉不再需要的進程或系統 必須爲其他應用程序恢復內存。

http://developer.android.com/guide/components/fundamentals.html