我的android應用程序在擴展Application的類的onCreate()回調中啓動服務。該服務僅在應用程序運行時執行與用戶相關的一些後臺任務。出於這個原因,我想在應用程序的上一次活動關閉時關閉該服務。我試圖在回調函數onTerminate()中執行關閉服務,但它永遠不會被調用。那麼服務應該關閉的最佳地點是什麼?什麼時候應該停止服務
謝謝!
我的android應用程序在擴展Application的類的onCreate()回調中啓動服務。該服務僅在應用程序運行時執行與用戶相關的一些後臺任務。出於這個原因,我想在應用程序的上一次活動關閉時關閉該服務。我試圖在回調函數onTerminate()中執行關閉服務,但它永遠不會被調用。那麼服務應該關閉的最佳地點是什麼?什麼時候應該停止服務
謝謝!
一旦啓動,Android服務將繼續運行,直到調用Context.stopService()或stopSelf()。
您可以使用各種掛鉤來使用Context.stopService(服務本身,或其中一個活動的onDestroy()/ onPause回調,或單擊按鈕)來停止服務。
確實,Android本身做了一些資源管理,但是在Android決定終止你的服務之前可能需要很長時間。而一個正在運行但沒有做任何事情的服務只會消耗其他應用可能需要的手機資源。
在你的情況下,你最後一次活動的onPause方法將是一個很好的將被調用,因此是停止服務的正確位置。
onPause()回調將在您的活動由於任何原因而暫停時發生,並且您知道發生這種情況時,在調用onResume()之前,您的應用程序將不會再次可見。如果您的服務有理由在您的活動可能可能很快重新啓動的情況下運行,則應該向onPause()調用的服務中添加一個條目,以設置延遲的服務終止。在onResume()中,您可以通過另一個條目取消該延遲終止。
Android中沒有「應用程序運行時」的概念,它不僅僅是Web應用程序中的「應用程序正在運行時」的概念。您可以自行記帳以「跟蹤應用程序的最後一次活動何時關閉」(無論您認爲「關閉」是指)還是重寫您的應用程序以擁有更明智的服務策略。很少有應用程序需要服務以「應用程序正在運行時」的範圍連續運行 - 要麼工作應該繼續直到完成,要麼工作應該繼續,直到用戶告訴您停止或者其他事情。 – CommonsWare 2011-06-09 12:10:46