2015-12-13 68 views

回答

0

如果您需要安排應該運行的任務,即使應用程序不再活動,然後使用AlarmManager

如果您需要安排應該只運行時程序是活動的,那麼你可以使用Observable.interval()和排放作出反應來執行一些代碼,請不要忘記從Observable在適當的時候取消訂閱(當Activity是一個任務暫停等),所以應用程序不會燒燬電池!

+0

我可以創建一個publishsubject,在Application create上訂閱它,並且每當AlarmManager觸發一個BroadcastReceiver時,在publishsubject上調用onNext?這會燒燬電池嗎? – cgcgbcbc

2

,請不要使用此解決方案:

要使用intervalRxJava你必須確保你的應用程序的過程中保持活着。一種方法是在foreground service中使用Observable。這是一個壞主意,因爲服務是NOT actively delivering value to the user。等待時間過去並不能爲用戶帶來價值。請再次請勿使用此。

AlarmManagerJobScheduler(或它的backport GcmNetworkManager)是重複背景活動的更好選擇。如果您使用AlarmManager.setInexactRepeating(),系統可以將來自多個應用程序的作業一起批量以節省電池。使用JobScheduler可讓您在特定條件下執行後臺作業,例如。當設備連接到互聯網或電池電量超過20%時。 (互聯網需要檢查天氣)。

interval from RxJava確實有它在Android上的用法。這是一個很好的替代Runnable.postDelayed相對較短的時間。它使代碼更短,更具可讀性。

+0

我可以創建一個publishsubject,在Application create上訂閱它,每當AlarmManager觸發一個BroadcastReceiver時,在publishsubject上調用onNext? – cgcgbcbc

+0

@cgcgbcbc如果你的應用程序不在前臺Android可以殺死它。再舉一個例子,每小時獲取天氣數據'JobScheduler'是最有效的方法。 https://plus.google.com/+AndroidDevelopers/posts/GdNrQciPwqo – LordRaydenMK