2017-04-05 115 views
1

我正在構建一個類似於Runtastic/Endomondo/Strava的應用程序,它需要獲取GPS位置的服務,直到用戶停止它的顯示。如何防止系統終止我的'前臺'服務?

我跑Runtastic和我的應用程序來嘗試它。 Runtastic很好。但是我的應用程序丟失了通知在狀態欄中的所有數據。我認爲服務會自行重啓,或者Android會終止我的服務。

我在LG G3上測試了應用程序,配備2GB內存,我認爲它足夠運行Runtastic和我的應用程序。

所以,我的問題是¿保持服務在後臺運行,或避免系統殺死它的最佳方式是什麼?我想模仿Runtastic/Endomondo/Strava的邏輯。這意味着,電池壽命並不重要。

  • 我試着START_STICKY標誌啓動該服務的方法onStartCommand

  • 我試圖用startForeground方法來啓動服務

  • 我已經試過AQUIRE一個WakeLock

繼文檔(https://developer.android.com/guide/topics/processes/process-lifecycle.html)我的服務應該是 'A可見的過程'。

這裏是我服務的代碼要點:https://gist.github.com/cpalosrejano/cc1ab73c4819c3e84234f2d619421b93

¿我應該聲明服務作爲的Manifest.xml過程?

+0

'startForeground'應該做的訣竅,如果你正確實施它 –

+0

@VladMatvienko我已經使用它。但我的服務被系統殺死。請你可以看看要點嗎?也許我犯了一個錯誤。不管怎麼說,還是要謝謝你! – cpalosrejano

+0

好吧,它不顯示你如何開始你的服務 –

回答

1

保持服務在後臺運行或避免系統死機的最佳方式是什麼?

你不知道。前臺服務是最好的,你可以得到。

但我的應用程序,失去altought通知所有的數據是在狀態欄尚未

您的數據保存到數據庫中,SharedPreferences,文件或服務器。一個進程不是一個持久的數據存儲。

+0

當用戶停止服務時,我已經將數據保存在數據庫中。主要的問題是服務被系統殺死,導致在用戶停止顯式服務之前丟失了我的服務的所有變量。所以,我需要保持服務清醒,直到用戶決定停止服務。 – cpalosrejano

+0

@cpalosrejano:「當用戶停止服務時,我已經將數據保存在數據庫中了」 - 這太遲了。數據更改時可能保存數據,可能是批量。 「我需要保持服務清醒,直到用戶決定停止服務」 - 不,您需要在數據更改時保存數據。 – CommonsWare

+0

所以,前臺服務是我能得到的最好的服務。這確保了服務不會在系統運行在低內存時被殺死,不是嗎?如果是這樣,我應該避免在我的服務上保存變量,以避免消耗內存。謝謝! – cpalosrejano