2017-09-15 99 views
0

我有一個連接到Bitmessage網絡的應用程序,即一直在下載和處理來自P2P網絡的數據。此外,它應該(可選)只使用WiFi /未定義的網絡。如何解決Android JobScheduler超時問題?

我已經通過使用JobScheduler實現了這一點,但不幸的是它有10分鐘的超時時間(顯然甚至在棒棒糖上1分鐘)。

因此,在短期,我該如何實現一個

  • 自動啓動的服務時,提供無線網絡連接
  • 當計量網絡用於
  • 沒有超時
  • 作品會自動斷開連接在所有Android版本上自Lollipop

回答

5

正如您發現的,JobScheduler不是t他正確的組件在後臺連續運行。正確的組件是foreground service

從您的要求:

  • Wi-Fi時可用

還是應該JobScheduler這個自動啓動。你的JobScheduler本身並沒有做任何工作:它只是開始你的前臺服務。如果您希望回到API 14,並且只需要在具有Google Play服務的設備上運行,就可以使用Firebase JobDispatcher。當計量網絡用於

在您的前臺服務

  • 自動斷開,你應該編程方式註冊爲CONNECTIVITY_ACTION廣播的監聽器。在回調中,您應該檢查isActiveNetworkMetered()(在API 16上提供)的結果,如果爲true,則停止前臺服務。

    • 沒有超時

    前臺服務有沒有時間出來:它會繼續運行,直到你停止服務。強烈建議使服務成爲前臺服務所需的通知有一個action以允許用戶手動停止服務。

+0

非常感謝,我會盡力的!這幾乎就是我所做的,除了我實現onStopJob()而不是解決方案。 很遺憾,JobScheduler不允許關閉超時,這對我的需求來說非常完美,而且非常易於使用。 – Chris

1

如前所述,作業調度程序不適用於永久運行的任務。這是前臺服務的目的。

就你而言,我建議使用一個作業來監視你想要的啓動約束(測量網絡等)。當該作業運行時,將啓動前臺服務來執行實際工作,並從onStartJob()返回false。

然後,當您的前臺服務正在運行時,只需使用連接&網絡API直接觀察丟失的計量網絡,並在適當時關閉前臺服務。