2

我的Android應用程序通過在特定時間發送通知來幫助用戶遵循其日常計劃。使用JobScheduler可以輕鬆解決此任務。它看起來簡單,輕便,並且是最新的解決方案。在Android上每天運行計劃任務一次

我在苦苦掙扎的是如何計劃每天的所有通知。我需要運行代碼來檢查用戶的每日計劃並安排每天午夜時間安排通知。到目前爲止,我發現了兩種方法

使用JobService。可以重新安排與

公衆最終無效jobFinished(JobParameters參數,可以布爾needsReschedule)

但我認爲這是一個不好的解決方案,因爲

  1. 我需要將完成的工作視爲失敗,雖然成功

  2. 計劃時間將線性增加/ exponenti盟友,這是不能接受的。

另一種方法是使用AlarmManager,但它也有一些缺點

  1. 的根據文件

已註冊的警報被保留,而設備是睡着了(如果在此期間關閉設備,可以選擇性地喚醒設備),但是如果關閉並重新啓動,設備將被清除。

這是不可接受的,因爲我的用戶可能會錯過重要的事情。

  1. 我讀過它很快就殺死了電池。真的嗎?

我在文檔中找到的其他解決方案看起來並不像我所需要的。 (https://developer.android.com/topic/performance/scheduling.html

任何想法如何在日常的基礎上運行計劃任務,這將輕而易舉重啓?

回答

0

使用JobService很好。你不需要重新安排你的工作。只需根據需要創建新工作。

+0

好主意。但基於下面的評論,我還需要考慮打盹模式,因爲它可以推遲JobScheduler的執行。所以據我的理解,我可以在JobScheduler和AlarmManger中實現此功能,唯一的折衷是電池消耗和計劃時間精度之間的關係。那麼,至少有幾個選擇是很好的。謝謝! – StackNRG

0

我也有自己的調度警報問題。更糟的是,從Android 6開始,打盹模式會延遲警報執行。

請看看:https://developer.android.com/training/monitoring-device-state/doze-standby.html

對於報警,你可以有一個啓動完成監聽器,並重新安排重新啓動報警。如果您在報警觸發期間不需要網絡連接,請參閱從上面的鏈接中將您的應用修改爲打盹

+0

看起來像AlarmManger可以通過setAndAllowWhileIdle()方法滿足我的要求。我現在唯一擔心的是電池消耗。從文檔 「這些警報可以顯着影響閒置時設備的電源使用情況(從而導致應用程序對電池造成嚴重的電池責任安排),因此應該小心使用它們。」因此,我很可能需要執行一些操作實驗/研究來了解AlarmManger在電池使用壽命方面的成本。我是Android新手,所以錯過了打盹模式部分。感謝您指出了這一點! – StackNRG

+0

從我迄今的經驗來看,'setExactAndAllowWhileIdle'似乎在需要的時候觸發,唯一的缺點是在報警觸發期間你沒有網絡連接。所以使用它爲本地事情應該工作。根據我的理解,在打盹模式下,警報和工作正在推遲到下一個維護時段,所以有計劃工作似乎沒有幫助你的情況。讓事情變得更糟JobScheduler可以從android 21+獲得,而對於舊版本,可以使用Firebase JobDispacther,但目前它似乎只使用GooglePlayDriver,即使在androdid 5中也是如此。 – Alin

相關問題