Android 6.0的省電技術(shù)Doze和App Standby理解及測試

本文章轉(zhuǎn)載于搜狗測試

對于移動app棍厂,性能優(yōu)化是永無止境的話題,而在性能指標(biāo)中扯俱,耗電量又是重中之重书蚪,android的大神們當(dāng)然也在為此努力,所以從android 6.0開始迅栅,谷歌引入了兩項新的省電技術(shù)延長電池使用時間殊校,分別是Doze(休眠)和App Standby(app待命模式),只要app是運行在6.0(api 23)及以上的系統(tǒng)读存,

無論app編譯時是否使用的target=23为流,都會受到這兩種技術(shù)的限制

一宪萄、理解什么是Doze模式

如果設(shè)備滿足

1艺谆、屏幕關(guān)閉;

2拜英、沒有連接電源静汤,

這樣持續(xù)一段時間后系統(tǒng)就會進入Doze模式,在Doze模式下居凶,系統(tǒng)通過限制app訪問網(wǎng)絡(luò)和其對CPU使用來達到省電的目的虫给,app的網(wǎng)絡(luò)訪問功能會被禁用,同時延時執(zhí)行作業(yè)侠碧,異步任務(wù)及標(biāo)準(zhǔn)鬧鐘事件抹估。

同時,為了保證app的工作弄兜,系統(tǒng)會周期地退出Doze模式药蜻,以保證app完成那些被延時的任務(wù),如下圖替饿,這個狀態(tài)被稱作maintenance window(維護窗口)语泽。且隨著系統(tǒng)處于Doze模式時間增長,進入maintenance window的頻率會降低视卢。

二踱卵、Doze 模式下的限制

網(wǎng)絡(luò)訪問功能被關(guān)閉

系統(tǒng)會忽略wake locks,即app無法持續(xù)占有電源

標(biāo)準(zhǔn)鬧鐘 AlarmManager(包括setExact())和setWindow()))都會被延時到下一個maintenancewindow才激活

1 . 如果app仍需要在Doze時使鬧鐘生效据过,可以使用setAndAllowWhileIdle())或setExactAndAllowWhileIdle())

2 . 使用函數(shù)setAlarmClock())設(shè)置的鬧鐘在Doze時仍會生效惋砂,系統(tǒng)會在鬧鐘生效前推出Doze。

系統(tǒng)不會進行Wi-Fi掃描

系統(tǒng)不允許異步Adapters運行

系統(tǒng)不允許JobScheduler運行

三绳锅、理解App Standby

android系統(tǒng)通過App Standby機制可以把用戶沒有使用的app置為空閑狀態(tài)西饵,當(dāng)然前提是app沒有命中以下條件:

用戶明確的啟動了該app

app有前臺進程(包括前臺的activity、前臺service榨呆,或者正在被其他activity及前臺service使用)

app當(dāng)前沒有在鎖屏界面或者通知欄有通知

當(dāng)設(shè)備連接到電源時庸队,系統(tǒng)會把所有處于standby的設(shè)備恢復(fù)到正常運行狀態(tài),如果設(shè)備長期處于空閑狀態(tài)彻消,系統(tǒng)會每天允許standby 的app聯(lián)網(wǎng)一次

四、當(dāng)設(shè)備處于Doze模式時宙拉,使用GCM與app進行交互。

Google Cloud Messaging (GCM)是谷歌提供的一套用于服務(wù)端實時推送消息的服務(wù)谢澈,通過high-priority GCM messages,GCM實現(xiàn)了在Doze和App Standby模式下的正常工作锥忿,GCMhigh-priority messages會喚醒app并允許其進行網(wǎng)絡(luò)訪問牛郑,即使當(dāng)前設(shè)備正處于Doze模式或app整除standby狀態(tài)。而當(dāng)app處理完推送消息后敬鬓,app又會進入Standby狀態(tài)淹朋。所以GCM high-priority messages并不會影響系統(tǒng)的Doze狀態(tài),也不會影響其他出于Standby狀態(tài)的app钉答,這樣有助于最小化電量的消耗础芍。

五、支持其他的用戶場景

如果使用GCM仍不能滿足app的需求数尿,android還提供了白名單機制使app能在Doze和Standby時仍能夠訪問網(wǎng)絡(luò)和使用partial wakelocks仑性,然而,其他的限制右蹦,如作業(yè)調(diào)度诊杆,異步操作,及鬧鐘仍不會執(zhí)行何陆。

開發(fā)者可以通過接口isIgnoringBatteryOptimizations())來判斷當(dāng)前app是否處于白名單中刽辙。對于白名單,有以下幾點值得關(guān)注:

用戶可以手動配置白名單甲献,其位置在設(shè)置->電池->電池優(yōu)化

開發(fā)者可以通過發(fā)送action為REQUEST_IGNORE_BATTERY_OPTIMIZATIONS的Intent來調(diào)起電池優(yōu)化配置頁面颂翼。

開發(fā)者也可以通過添加權(quán)限REQUEST_IGNORE_BATTERY_OPTIMIZATIONS使其可以觸發(fā)系統(tǒng)對話框晃洒,詢問用戶是否將該app添加到白名單中。觸發(fā)添加白名單確認(rèn)對話框的action為ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS

當(dāng)然朦乏,如果用戶需要球及,他們可以隨時在電池優(yōu)化配置里把app從白名單中移除。

六呻疹、測試Doze及App Standby下的應(yīng)用工作狀態(tài)

(一)在Doze時測試APP

1 . 需要一臺系統(tǒng)版本大于等于6.0(api23)的設(shè)備

2 . 連接USB吃引,運行被測app,保持app在活動狀態(tài)

3 . 關(guān)閉設(shè)備屏幕

4 . 通過下面的adb命令強制系統(tǒng)進入Doze模式

$ adb shell dumpsys battery unplug

$ adb shell dumpsys deviceidle step

第二個命令需要執(zhí)行多次才能使系統(tǒng)進入idle狀態(tài)

5 . ?退出Doze狀態(tài),檢查app的工作狀態(tài)符合預(yù)期

(二)測試App Standby

1 . 需要一臺系統(tǒng)版本大于等于6.0(api23)的設(shè)備

2 . 連接USB镊尺,運行被測app朦佩,保持app在活動狀態(tài)

3 . 通過下面的adb命令使app進入standby

$ adb shell dumpsys battery unplug

$ adb shell am set-inactive true

4 . 通過下面的adb命令模擬喚醒app

$ adb shell am set-inactive false

$ adb shell am get-inactive

5 . app喚醒后檢查其工作狀態(tài)符合預(yù)期,尤其是通知和后臺任務(wù)是否正常

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末庐氮,一起剝皮案震驚了整個濱河市语稠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌弄砍,老刑警劉巖仙畦,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異音婶,居然都是意外死亡慨畸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門衣式,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寸士,“玉大人,你說我怎么就攤上這事瞳收⌒持妫” “怎么了?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵凡蜻,是天一觀的道長垢箕。 經(jīng)常有香客問我条获,道長,這世上最難降的妖魔是什么委煤? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任修档,我火速辦了婚禮,結(jié)果婚禮上讥邻,老公的妹妹穿的比我還像新娘。我一直安慰自己兴使,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布蜈首。 她就那樣靜靜地躺著欢策,像睡著了一般赏淌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上六水,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天掷贾,我揣著相機與錄音,去河邊找鬼场靴。 笑死港准,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的轨帜。 我是一名探鬼主播衩椒,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼毛萌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了朝聋?” 一聲冷哼從身側(cè)響起冀痕,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤言蛇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后腊尚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年娇妓,在試婚紗的時候發(fā)現(xiàn)自己被綠了活鹰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡着绷,死狀恐怖荠医,靈堂內(nèi)的尸體忽然破棺而出宾抓,到底是詐尸還是另有隱情,我是刑警寧澤石洗,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布讲衫,位于F島的核電站,受9級特大地震影響招驴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜别厘,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一拥诡、第九天 我趴在偏房一處隱蔽的房頂上張望氮发。 院中可真熱鬧冗懦,春花似錦披蕉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至娜搂,卻和暖如春吱抚,著一層夾襖步出監(jiān)牢的瞬間秘豹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工啄刹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留凄贩,地道東北人。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓昵时,卻偏偏與公主長得像壹甥,于是被迫代替她去往敵國和親壶熏。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內(nèi)容