從android6.0開始,系統提供了兩種省電功能(延長電池壽命和使用時間)
1.進入doze模式
在手機未充電,完全靜止且熄屏一段時間後,android系統會自動進入doze模式
2.doze模式效果
1.網路訪問被掛起
2.wake locks被無視
3.alarmmanager被推遲到下乙個maintenance window視窗,
除非使用alarmmanager新方法
:setandallowwhileidle
(),setexactandallowwhileidle
(),setalarmclock()
4.wifi掃瞄被停止
5.syncadapter同步工作被停止
6.jobscheduler定時任務被停止
doze模式的五種狀態
active
: 活動狀態
inactive
: 螢幕關閉進入非活動狀態
idle_pending
idle
: 空閒狀態
idle_maintenance:處理掛起任務
但隨著時間推移,間隔時間會變長,以此減少電量消耗
3.退出doze模式
1.手機充電
2.手機移動
3.手機螢幕開啟
doze模式需要螢幕關閉(通常晚上睡覺或長時間螢幕關閉才會進入)
if (build.version.sdk_int >= build.version_codes.m)
}新增守護程序,相互監聽重啟; 提醒使用者加入鎖屏清理白名單
2.手機重啟,alarmmanager任務失效
監聽重啟廣播,重新設定定時鬧鐘
3.從android4.
4(api19)開始,alarmmanager機制修改,
set(),
setrepeating
()定時不再精確,甚至setrepeating只生效一次(不會重複)
新增精確定時方法:
setexact()
,setwindow()
,setalarmclock()
,4.從android6.
0(api23)開始,進入doze模式(省電優化)
,alarmmanager被延緩
新增精確定時方法:
setandallowwhileidle()
,setexactandallowwhileidle()
從android4.
4(api19)開始,新增精準定時方法都是一次性鬧鐘,沒有重複定時的方法,
所以當需要重複週期鬧鐘,只能在下一次喚醒時重新設定定時,間接實現重複鬧鐘!
精確定時一次demo如下:
void
setwakeattime
(context cxt,
int delay)
Android APP耗電優化
picasso context context,dispatcher dispatcher,cache cache,listener listener,requesttransformer requesttransformer,listextrarequesthandlers,stats stats...
Android 耗電優化
一 監視電量的變化和充電狀態 當你通過降低後台任務的更新頻率來降低其對電量的影響時,檢測當前的電量和充電狀態都是乙個好的開始好的嘗試。應用的更新對電量的影響最好由剩餘電量和充電狀態決定。充電時,應用的更新操作對電量的影響可以忽略不計,此時你應該最大化你的重新整理頻率。相反的沒有充電時,降低你應用的更...
多平台訊息推送是安卓耗電原因之一?
研究訊息推送原理的過程中發現乙個安卓耗電的原因之一 ios平台的推送服務之所以工作的很好,是因為每一台手機僅僅保持乙個與伺服器之間的連線 apns 事實上c2dm android cloud to device messaging 或者gcm也是這麼工作的。但是gcm和c2dm在國內被牆,所以無法通...