2012-05-08 51 views
0

我有一個非常簡單的Android GPS日誌記錄應用程序,運行一項服務。該活動不過是一個開始/停止按鈕來控制服務。點擊一個按鈕後,我開始一個新的後臺服務(使用START_STICKY)。然後關閉活動並且服務正常運行。我可以再次運行該應用程序來停止服務。我的Android服務突然停止,並創建一個新的服務

該服務只需將GPS座標記錄到文件。我正在登錄每個方法和異常捕獲。在某些時候,可能是幾分鐘或幾小時,我的服務將停止,但onDestroy不會被調用,也不會引發異常。日誌只是顯示我的最後一個文件寫入工作,然後沒有。我懷疑GC在殺死它,但我認爲START_STICKY基本上意思是「請儘可能長時間運行我」。 30秒後,啓動服務的新副本(不同的PID),onCreate和onStartService按照慣例調用。

如果/當它終止其父活動或應用程序時,Android會終止一項服務嗎?是否有必要在單獨的線程中運行該服務以防止出現這種情況?爲什麼整個服務生命週期沒有完成(onDestroy沒有被調用)?

回答

0

服務實際上正在主線程中運行,如果您的工作可能需要一些時間,您應該創建一個新線程。如果您使用IntentService而不是常規服務,Android可以爲您做到這一點。

我應該補充一點,Android會殺死佔用主線程超過5(?)s的進程。鎖定主線程將導致ANR(應用程序無響應),也許這是您在服務中遇到的情況。

0

當其父活動關閉時,Android不會終止後臺服務。但是當設備屏幕被鎖定時,它暫停後臺作業。你的問題可能與此有關。當屏幕再次解鎖時,該服務預計將從其離開的地方繼續工作。

+0

我的服務在屏幕鎖定時運行正常,所以我不認爲這是問題所在。據我所知,服務不會暫停和恢復 –