根據https://github.com/ReactiveX/RxAndroid/issues/257#issuecomment-164263215。間隔僅用於活動代碼,如果應用程序未喚醒,則不起作用。那麼如何使用區間進行後臺調度任務呢?如何使用rx java的間隔進行後臺任務
回答
如果您需要安排應該運行的任務,即使應用程序不再活動,然後使用AlarmManager
。
如果您需要安排應該只運行時程序是活動的,那麼你可以使用Observable.interval()
和排放作出反應來執行一些代碼,請不要忘記從Observable
在適當的時候取消訂閱(當Activity
是一個任務暫停等),所以應用程序不會燒燬電池!
我可以創建一個publishsubject,在Application create上訂閱它,並且每當AlarmManager觸發一個BroadcastReceiver時,在publishsubject上調用onNext?這會燒燬電池嗎? – cgcgbcbc
,請不要使用此解決方案:
要使用interval
從RxJava
你必須確保你的應用程序的過程中保持活着。一種方法是在foreground service中使用Observable
。這是一個壞主意,因爲服務是NOT actively delivering value to the user。等待時間過去並不能爲用戶帶來價值。請再次請勿使用此。
AlarmManager和JobScheduler(或它的backport GcmNetworkManager)是重複背景活動的更好選擇。如果您使用AlarmManager.setInexactRepeating()
,系統可以將來自多個應用程序的作業一起批量以節省電池。使用JobScheduler
可讓您在特定條件下執行後臺作業,例如。當設備連接到互聯網或電池電量超過20%時。 (互聯網需要檢查天氣)。
interval
from RxJava
確實有它在Android上的用法。這是一個很好的替代Runnable.postDelayed
相對較短的時間。它使代碼更短,更具可讀性。
我可以創建一個publishsubject,在Application create上訂閱它,每當AlarmManager觸發一個BroadcastReceiver時,在publishsubject上調用onNext? – cgcgbcbc
@cgcgbcbc如果你的應用程序不在前臺Android可以殺死它。再舉一個例子,每小時獲取天氣數據'JobScheduler'是最有效的方法。 https://plus.google.com/+AndroidDevelopers/posts/GdNrQciPwqo – LordRaydenMK
- 1. 如何使用GCD對異步後臺任務進行排序?
- 2. java後臺任務
- 3. 後臺長時間運行的任務
- 4. 的Windows 8商店應用:再執行之間的後臺任務間隔
- 5. 爲什麼使用服務進行後臺任務很重要?
- 6. Rails 3 - 以頻繁的間隔在後臺觸發任務
- 7. Javascript:使用setInterval進行後臺任務的理想塊大小?
- 8. Heroku:使用RQ進行Python的後臺任務
- 9. 如何使用RX的Java
- 10. 使用NSThread在後臺執行任務
- 11. 如何在後臺執行Android任務
- 12. 如何在後臺執行任務?
- 13. Java:以不同的時間間隔運行任務
- 14. 在後臺執行任務
- 15. 爲什麼使用Service進行後臺任務?
- 16. 是否可以使用SignalR進行後臺任務
- 17. 如何在獨立進程中運行UWP後臺任務?
- 18. 如何與後臺任務進行通信?
- 19. 後臺任務只運行
- 20. 在MVC中使用webbackgrounder nuget長時間運行後臺任務
- 21. 如何創建一個後臺服務與間隔時間
- 22. 如何使用處理程序在後臺運行任務
- 23. 後臺任務
- 24. Android:更改在後臺運行的服務的更新間隔
- 25. 如何正確使用AlarmManager類以固定的時間間隔執行任務?
- 26. 如何在後臺服務之間進行通信
- 27. 如何使用Git進行多任務
- 28. 以時間間隔對任務數進行直方圖編排
- 29. iPhone中的通用長時間運行後臺任務
- 30. iOS應用程序運行的後臺任務時間
您有任何具體的用例嗎?什麼樣的任務?多久?什麼樣的應用程序?例如 – LordRaydenMK
@LordRaydenMK,每1小時獲取一次天氣數據。 – cgcgbcbc