2015-11-04 168 views
-1

我正在開發一個Android項目,即使設備被鎖定,我也需要應用程序才能工作。Android長時間運行服務

想法是打開將啓動(意圖)服務的應用程序,該服務始終處理數據。設備可以被鎖定/放置,並且在打開應用程序一段時間後,該服務被手動停止。該服務應始終在後臺運行

我在網上找到的信息,但我不知道使用什麼和以何種方式..

我發現,IntentService可以使用。此服務應運行在新線程。我需要一直處理來自gps的數據,我應該使用WakefulBroadcastReceiver

謝謝。

回答

1

IntentService不一定是你想要使用的。它會自動產生一個新線程來處理傳入的Intent。一旦處理完所有輸入的Intents,它將停止Service。要長時間運行Service,您需要從Service派生,並在啓動時從onStartCommand()方法返回START_STICKY,再加上自己的線程來處理您的後臺工作。

如果您需要監控GPS,則必須在使用WakeLock保持設備保持清醒狀態的同時進行管理。請注意,在棉花糖中,由於新的打盹模式,即使忽略棉球,它也會變得更加複雜。

另外,請注意,Android的架構方式仍有可能會導致運行後臺Service的應用程序被終止。 Android使用基於內存壓力和用戶感知優先級的獨特流程管理技術來確定流程應該停留多久。我建議閱讀文檔中的Service生命週期。

0

在android中,他們不是一種傻瓜證明的方式,可以確保您的服務永遠運行,因爲當系統需要資源時(基於某個內存閾值),LMK(低內存殺手)會終止服務,如果它可以重新啓動服務。如果正確處理重新啓動,服務將繼續運行。

給予前景優先級的服務明顯不太可能被殺掉,所以這可能是你最好的選擇。然而,它們將會是您的服務在頂部菜單欄中的後臺運行通知。 Foreground Service