2017-02-18 29 views
-1

基本上我被卡住了,因爲電池中的「改進」在Android 6.0+中添加了。我的應用程序從第三方服務器的Web服務獲取數據:我的應用程序從11+在Android中每x分鐘運行IntentService的正確方式包括打盹

方案

這裏是我的方案支持API。由於它不是我的服務器,因此我無法控制何時添加或刪除數據。數據的可用性各不相同。我希望能夠觸發一個IntentService來獲取數據,例如在接下來的6個小時內每30/60分鐘一次。通過這種方式,我可以在我的應用程序中的數據覆蓋數據從服務器不可用時的情況。 當然,即使我的應用程序已關閉,也需要執行此操作。

你可能會說這對電池不友好,但它是高級用戶的選擇。

我做了什麼至今

我一直在努力了很多與設置​​。雖然設置重複鬧鐘似乎是最簡單和最方便的方式,但它只有在android 5.0之前才能可靠地工作。

從引入Doze開始,根據文檔,報警被推遲到maintenance window,並且由於這些窗口在1-2-4等小時,它不適合我的需要。

我放棄了使用集repeating,並試圖使用一次Alarm它在IntentService執行中重新安排。從測試setExact似乎沒有運行良好,但後來嘗試setExactAndAllowWhileIdle這確實在正確的時刻開火,但如果在Doze模式下,它沒有網絡連接訪問,使其無用。

即使是這樣,我不知道當setRepeatingsetExact報警被延遲,但之前在下一個維護窗口中的設備被喚醒會發生什麼......

基本上現在我卡住,用未機制工作,我不知道還有什麼可以選擇的應用程序支持的Android版本和需求。 LE:實際上,我並不知道在Android上設置背景作業的好方法,即使不包括Doze。我的意思是,我們確實有JobScheduler這似乎是一件很好的事情......但是,嘿,它只在Android 21上可用,而不是向後支持......我的意思是,真的,有一個簡單的事情要做,我已經等待迄今爲止的幾天。

回答

1

如果設備處於空閒模式(由於打盹系統),這意味着用戶沒有使用它,因此在下一個維護時段中我看不到任何關於推遲作業(更新)的問題。

用於喚醒手機,允許用戶訪問互聯網的唯一方法是使用

setAlarmClock() 

如果使用setAlarmClock(),那麼設備將退出空閒模式下的報警時間前幾分鐘:這個要看配置Doze,使用shell命令爲了測試目的而實際更改。在特殊情況下,您應該使用setAlarmClock(),例如提醒重要的日曆活動。

此外,當您設置它時,狀態欄中應該顯示一個圖標(鈴):它與系統報警使用的機制相同。

順便說一下,我會勸阻這種方法,並等待下一個維護窗口。實際上,你應該避免使用輪詢機制。

+0

謝謝,'setAlarmClock'似乎是唯一真正的選擇,但它確實是一個超出範圍。 – Alin