Android Doze模式適配實驗記錄
課題:想定時執(zhí)行一些代碼,如每隔4分鐘向服務(wù)器發(fā)送一個數(shù)據(jù)包。
實驗1:用TimerTask.
機型:vivo android 9.0? V1911A vivoZ5X
經(jīng)常休眠,有時候長幾小時。
實驗2:
機型:vivo android 9.0? V1911A vivoZ5X
自從Android6.0引入低功耗與待機模式之后,TimerTask就更不能勝任了,根據(jù)官方文檔,要用.setExactAndAllowWhileIdle函數(shù)才能啟動在Doze模式下正常運行,不過這個函數(shù)也會被推遲,比如通常是5分鐘執(zhí)行一次,6分鐘執(zhí)行1次,甚至9分鐘,官方文檔也提到了9分鐘,進(jìn)入Android源碼閱讀該函數(shù)的注釋,說是在DOZE模式下,有可能還會推遲定時任務(wù)到15分鐘。官方文檔也提到了電池白名單,因此我將APP加入這個白名單測試,setExactAndAllowWhileIdle在國內(nèi)廠商的執(zhí)行情況還是不能準(zhǔn)確執(zhí)行,但是比之前已經(jīng)強多了,至少不會出現(xiàn)幾小時都不執(zhí)行的情況。目前是一打開屏幕,立即會執(zhí)行掛起的setExactAndAllowWhileIdle的定時任務(wù)。
非DOZE模式,則會正常4分鐘后執(zhí)行定時任務(wù)。這里解釋一下,setExactAndAllowWhileIdle本身只執(zhí)行1次,是我寫了一些代碼,在執(zhí)行任務(wù)的時候,又調(diào)用1次setExactAndAllowWhileIdle,然 后這個執(zhí)行任務(wù)就變成了 循環(huán)定時執(zhí)行了,實現(xiàn)了Ti mer的循環(huán)定時執(zhí)行功能。
在網(wǎng)上搜了很多,都遇到了setExactAndAllowWhil
Android
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。