我有一個連接到Bitmessage網絡的應用程序,即一直在下載和處理來自P2P網絡的數據。此外,它應該(可選)只使用WiFi /未定義的網絡。如何解決Android JobScheduler超時問題?
我已經通過使用JobScheduler實現了這一點,但不幸的是它有10分鐘的超時時間(顯然甚至在棒棒糖上1分鐘)。
因此,在短期,我該如何實現一個
- 自動啓動的服務時,提供無線網絡連接
- 當計量網絡用於
- 沒有超時
- 作品會自動斷開連接在所有Android版本上自Lollipop
我有一個連接到Bitmessage網絡的應用程序,即一直在下載和處理來自P2P網絡的數據。此外,它應該(可選)只使用WiFi /未定義的網絡。如何解決Android JobScheduler超時問題?
我已經通過使用JobScheduler實現了這一點,但不幸的是它有10分鐘的超時時間(顯然甚至在棒棒糖上1分鐘)。
因此,在短期,我該如何實現一個
正如您發現的,JobScheduler
不是t他正確的組件在後臺連續運行。正確的組件是foreground service。
從您的要求:
- Wi-Fi時可用
還是應該JobScheduler
這個自動啓動。你的JobScheduler
本身並沒有做任何工作:它只是開始你的前臺服務。如果您希望回到API 14,並且只需要在具有Google Play服務的設備上運行,就可以使用Firebase JobDispatcher。當計量網絡用於
在您的前臺服務
- 自動斷開,你應該編程方式註冊爲
CONNECTIVITY_ACTION
廣播的監聽器。在回調中,您應該檢查isActiveNetworkMetered()
(在API 16上提供)的結果,如果爲true,則停止前臺服務。
- 沒有超時
前臺服務有沒有時間出來:它會繼續運行,直到你停止服務。強烈建議使服務成爲前臺服務所需的通知有一個action以允許用戶手動停止服務。
如前所述,作業調度程序不適用於永久運行的任務。這是前臺服務的目的。
就你而言,我建議使用一個作業來監視你想要的啓動約束(測量網絡等)。當該作業運行時,將啓動前臺服務來執行實際工作,並從onStartJob()返回false。
然後,當您的前臺服務正在運行時,只需使用連接&網絡API直接觀察丟失的計量網絡,並在適當時關閉前臺服務。
非常感謝,我會盡力的!這幾乎就是我所做的,除了我實現onStopJob()而不是解決方案。 很遺憾,JobScheduler不允許關閉超時,這對我的需求來說非常完美,而且非常易於使用。 – Chris