1

隨着Oreo引入新的後臺服務限制,我很難找到一個地方來澄清IntentServices是否仍然可以在應用程序後臺運行時從JobScheduler啓動。Android Oreo服務限制會影響來自作業調度程序的intentservices?

我必須根據各地地理界線之後需要一個柵欄壞了運行的intentService一個非常重要的特點。我花了很長時間把它設置成排隊工作,當圍欄被打破並且應用程序在用於牛軋糖的DOZE中時。當網絡連接窗口重新打開時,當作業最終由操作系統運行時,我在intentService中依次分離每個作業。我現在不能在技術上開始服務,而應用程序不在前臺,或者由於我使用JobScheduler,這仍然被允許,所以我不能再這麼做了嗎?

回答

0

所以我做了下班像素一些測試,並在週末發現了一些有趣的事情。 Geofences仍然觸發應用程序後臺和手機鎖定,但打盹限制仍然適用。我的工作調度人員處理了打瞌睡的限制,而在工作中解僱的intentService也起作用了!地理圍欄的觸發因相應的新定位限制而延遲。所以我的帖子中的主要問題得到了回答。

我注意到了一件非常有趣的事情。我有一個在後臺運行的常規非綁定服務,它使用融合的位置API並每隔5秒獲取一次位置。在8.0仿真器中,這個服務在應用程序停止後大約5秒鐘停止。然而,在我的實際像素上,服務從未實際停止過,只是超級延遲。似乎要等待打盹的時間間隔,一次返回該地點並重新入睡。我會在我有時間之前測試更多,然後將它們發佈爲對感興趣的任何人的編輯。

0

閱讀這篇文章[探索Android上的奧利奧後臺執行的限制]

https://medium.com/exploring-android/exploring-background-execution-limits-on-android-oreo-ab384762a66c希望它會回答你的問題

+1

在我問這個問題之前,我實際上正在閱讀這篇文章。它與這個新限制的相當多99%的資源相同。它說JobScheduler是一個替代方案,但沒有詳細介紹如何使用它或將IntentServices產生的細節。 – Le2e410

+0

@Le2e410如果我沒有錯,那麼在本文中明確提到「首先要注意的是,如果當你的應用程序不在前臺時試圖調用startService(),那麼IllegalStateException將會是拋出「。所以如果您嘗試在後臺啓動服務,則會拋出異常,而不管啓動此服務的組件如何。 –

+0

是的,那正是我的想法,但我不確定是否因爲操作系統是啓動工作的人,這是一項工作。這讓我想知道當地理圍欄被破壞並且OS將pendingIntent發送到您的intentService時會發生什麼。當你的應用處於前臺時,geofences似乎只能工作了。如果我在這裏沒有錯過任何東西,那真是一個非常糟糕的疏忽。 – Le2e410

2

您不應該認爲您的應用程序能夠從工作中啓動服務。特別是,應用程序在執行作業時經常處於後臺狀態,在後臺狀態下調用startService()會引發異常。當然,撥打startForegroundService()總是合法的;儘管顯然這也有UI的含義。

JobIntentService明確旨在替換IntentService的方式,與Android O +背景的限制兼容。你應該考慮切換到那個,而不是使用傳統的IntentService支持類。

相關問題