Android系統(tǒng)電源管理及省電機(jī)制

Android系統(tǒng)電源管理及省電機(jī)制

移動設(shè)備因?yàn)槠溆邢薜碾姵乩咳牵‰娂记沙蔀锳ndroid開發(fā)者的一項(xiàng)必備知識报账。本文不探討怎樣從應(yīng)用層面省電,因?yàn)檫@些內(nèi)容已經(jīng)有很成熟的總結(jié)焕数。本文擬介紹Android系統(tǒng)的電源管理機(jī)制盗扒。因?yàn)楣P者對于Linux的淺薄知識跪楞,如有錯漏,請不吝指出侣灶。

一甸祭、常見電源管理機(jī)制(休眠)

在x86機(jī)器中,存在兩種電源管理方法:

  • APM(Advanced Power Management,高級電源管理)
  • ACPI(Advanced Configuration and Power Interface ,高級配置和電源接口)

這兩個標(biāo)準(zhǔn)不能同時允許在Linux上面褥影,默認(rèn)情況下池户,Linux運(yùn)行ACPI.需要注意,apm和acpi是互相沖突的兩個模塊,用戶在同一時間內(nèi)只能加載其中之一

APM基本已經(jīng)淘汰

ACPI主要執(zhí)行者是操作系統(tǒng)煞檩,可以單獨(dú)控制外設(shè)处嫌。

ACPI主要分成6種狀態(tài),分別是S0到S5斟湃,它們代表的含義分別是:

  • S0:實(shí)際上這就是我們平常的工作狀態(tài)熏迹,所有設(shè)備全開,功耗一般會超過80W凝赛;

  • S1:也稱為POS(Power on Suspend)注暗,這時除了通過CPU時鐘控制器將CPU關(guān)閉之外,其他的部件仍然正常工作墓猎,這時的功耗一般在30W以下捆昏;(其實(shí)有些CPU降溫軟件就是利用這種工作原理)

  • S2:這時CPU處于停止運(yùn)作狀態(tài),總線時鐘也被關(guān)閉毙沾,但其余的設(shè)備仍然運(yùn)轉(zhuǎn)骗卜;

  • S3:這就是我們熟悉的STR(Suspend to RAM),這時的功耗不超過10W左胞;

  • S4:也稱為STD(Suspend to Disk)寇仓,這時系統(tǒng)主電源關(guān)閉,硬盤存儲S4前數(shù)據(jù)信息烤宙,所以S4是比S3更省電狀態(tài).

  • S5:這種狀態(tài)是最干脆的遍烦,就是連電源在內(nèi)的所有設(shè)備全部關(guān)閉,即關(guān)機(jī)(shutdown)躺枕,功耗為0服猪。

ACPI的省電主要就是依靠 S3,S4,S5狀態(tài)。

二拐云、Android系統(tǒng)的休眠機(jī)制

Android系統(tǒng)是基于Linux的罢猪,但是其因?yàn)橐苿釉O(shè)備的獨(dú)特性又有所不同,Android在kernel中支持的休眠模式有S0,S1,S3,S4叉瘩,但是這個是需要硬件配合來實(shí)現(xiàn)的坡脐,標(biāo)準(zhǔn)的手機(jī)Android系統(tǒng),只支持S0,S3房揭。

即休眠狀態(tài)實(shí)質(zhì)上就是掛起到內(nèi)存。

1. 兩個處理器芯片

Android手機(jī)有兩個處理器:

  • Application Processor(AP):AP是ARM架構(gòu)的處理器晌端,用于運(yùn)行Linux+Android系統(tǒng)捅暴;
  • Baseband Processor(BP):BP用于運(yùn)行實(shí)時操作系統(tǒng)(RTOS),通訊協(xié)議棧運(yùn)行于BP的RTOS之上咧纠。

在休眠狀態(tài)下蓬痒,BP仍舊會收取數(shù)據(jù),如有必要會喚醒AP漆羔。

2. Android的休眠流程

Android 在Linux的基礎(chǔ)上引進(jìn)了新的狀態(tài):預(yù)掛起(earlysuspend)梧奢,同時引進(jìn)了喚醒鎖機(jī)制狱掂。

其流程如下:

(1)一段時間內(nèi)無活動,系統(tǒng)發(fā)起掛起檢查亲轨。

(2)進(jìn)入earlysuspend狀態(tài)(關(guān)閉屏幕趋惨、背光、重力感應(yīng))

(3)檢查wake lock是否全部釋放惦蚊。

(4)如果全部釋放器虾,凍結(jié)進(jìn)程掛起外設(shè)。

(5)進(jìn)入深度睡眠蹦锋,等待外終端喚醒兆沙。

注:Android4.4以后和Linux保持統(tǒng)一,實(shí)現(xiàn)了AutoSleep機(jī)制莉掂,本質(zhì)區(qū)別不大葛圃,算是Linux和Android的一種相互妥協(xié)。

3. 頗有爭議的Opportunistic suspend

Android的休眠機(jī)制簡單粗暴憎妙,主要遵守兩條原則:

  • 系統(tǒng)沒有事情的時候就睡库正。
  • 不管三七二十一,休眠的時候休眠所有外設(shè)尚氛。

這種機(jī)制Linux社區(qū)是飽受爭議的诀诊,主要有以下幾項(xiàng)質(zhì)疑:

  1. 系統(tǒng)沒有事情做事很不好判斷的,可能會頻繁的觸發(fā)休眠流程阅嘶。
  2. 只有一個設(shè)備在做事的時候属瓣,其他設(shè)備也得陪著工作嗎?

注:Linux社區(qū)是有一套“多樣的系統(tǒng)組件單獨(dú)控制”的電源管理方案(如Linux kernel的Dynamic PM)

4. 在休眠狀態(tài)下保持被喚醒的機(jī)會:AlarmManager

AlarmManager 是Android 系統(tǒng)封裝的用于管理 RTC 的模塊讯柔,RTC (Real Time Clock) 是一個獨(dú)立的硬件時鐘抡蛙,可以在 CPU 休眠時正常運(yùn)行,在預(yù)設(shè)的時間到達(dá)時魂迄,通過中斷喚醒 CPU粗截。

(注:用Timer保持消息推送長連接是非常2B的)

三、Android在省電機(jī)制上做的努力

1. 傳感器批處理(Sensor batching)

Android 4.4 為了省電引入了一項(xiàng)新的技術(shù): Sensor batching捣炬。這不是一項(xiàng)獨(dú)特的技術(shù)熊昌,實(shí)際上很多其他OS也引入了該項(xiàng)技術(shù),它是什么意思呢湿酸?

該項(xiàng)技術(shù)允許設(shè)備積累一段時間的數(shù)據(jù)婿屹,而后一次性“上報”,引入這種技術(shù)后推溃,設(shè)備不必頻繁的喚醒CPU昂利,從而節(jié)省了電量。

2. JobScheduler

為了更有效率的利用電池,Android 5.0 引入了 JobScheduler API蜂奸。 應(yīng)用可以將一些實(shí)時性不強(qiáng)的任務(wù)(如)采用JobScheduler來做犁苏,Android系統(tǒng)會根據(jù)系統(tǒng)情況在合適的時機(jī)進(jìn)行調(diào)度執(zhí)行。

3. Doze機(jī)制

隨著時間流逝扩所,Google漸漸意識到围详,無良的開發(fā)者是不可靠的,依靠他們遵守可有可無的“規(guī)范”是不可能的碌奉。

于是Google在Android 6.0 引入了一種新的省電機(jī)制短曾,即Doze機(jī)制,中文可以翻譯成“對齊喚醒機(jī)制”赐劣。

當(dāng)設(shè)備處于未充電狀態(tài)嫉拐、屏幕熄滅一段時間后就會進(jìn)入Doze狀態(tài)。在這種狀態(tài)下魁兼,Android系統(tǒng)會限制使用訪問網(wǎng)絡(luò)和CPU婉徘。

每過一段時間,Android系統(tǒng)會退出Doze狀態(tài)咐汞,讓應(yīng)用執(zhí)行之前被延遲的活動盖呼。在這個執(zhí)行窗口,Android系統(tǒng)會執(zhí)行所有的異步操作化撕,時鐘(Alarm),同時允許APP訪問網(wǎng)絡(luò)几晤。

在執(zhí)行窗口的末期,Android系統(tǒng)又把所有的時鐘植阴、網(wǎng)絡(luò)請求蟹瘾、異步任務(wù)給掛起。再次進(jìn)入Doze狀態(tài)掠手。

隨著時間進(jìn)行憾朴,Doze的狀態(tài)時間會逐漸延長。

image
image

Doze機(jī)制是一種“在集中時間段處理事情”的省電思想喷鸽。

注:因?yàn)镈oze狀態(tài)众雷,AlarmManager也不是那么“準(zhǔn)時了”。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末做祝,一起剝皮案震驚了整個濱河市砾省,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌混槐,老刑警劉巖纯蛾,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異纵隔,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門捌刮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碰煌,“玉大人,你說我怎么就攤上這事绅作÷” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵俄认,是天一觀的道長个少。 經(jīng)常有香客問我,道長眯杏,這世上最難降的妖魔是什么夜焦? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮岂贩,結(jié)果婚禮上茫经,老公的妹妹穿的比我還像新娘。我一直安慰自己萎津,他們只是感情好卸伞,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著锉屈,像睡著了一般荤傲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上颈渊,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天遂黍,我揣著相機(jī)與錄音,去河邊找鬼儡炼。 笑死妓湘,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的乌询。 我是一名探鬼主播榜贴,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼妹田!你這毒婦竟也來了唬党?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤鬼佣,失蹤者是張志新(化名)和其女友劉穎驶拱,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晶衷,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蓝纲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年阴孟,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片税迷。...
    茶點(diǎn)故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡永丝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出箭养,到底是詐尸還是另有隱情慕嚷,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布毕泌,位于F島的核電站喝检,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏撼泛。R本人自食惡果不足惜挠说,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望坎弯。 院中可真熱鬧纺涤,春花似錦、人聲如沸抠忘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽崎脉。三九已至拧咳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間囚灼,已是汗流浹背骆膝。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留灶体,地道東北人阅签。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像蝎抽,于是被迫代替她去往敵國和親政钟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評論 2 345

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