精華區beta AndroidDev 關於我們 聯絡資訊
這個部分我之前有碰過一些 可以大概提供一些方向 但不足的地方可能需要請自行補足 wakeup source需要硬體支援 例如Qualcomm的chip可以指定GPIO為wakeup source 設成wakeup source的裝置在休眠過程中會耗電 因為有供電才能運作 假如來電時手機是休眠狀態 但仍可以接電話是因為接收電話是modem負責的 此時CPU會被modem喚醒,螢幕才會亮起來 原文提到的狀態都有加上USER_ user指的應該是user space的process 我認為休眠的目的是省電 真正的休眠模式應該是CPU沒有運作 從休眠到喚醒的過程如下: early suspend -> suspend -> resume -> late resume USER_SLEEP "當下"還沒完全進入休眠模式喔,這要怎麼說呢? 只要能看到log就不算是休眠,不論是alog或klog 因為需要CPU運作才能印log 要先知道android運作在user space,底層還有linux kernel在跑 從kolog可以看到休眠過程會有以下兩行: I/klogd ( 306): [ 245.934411] Freezing user space processes ... I/klogd ( 306): [ 246.213398] Freezing remaining freezable tasks ... 大致上是android先睡且device關閉後,linux kernel才會睡 至少是上面第二行log印完後才算是進入休眠 另外,proximity sensor也會被要求設成wakeup source 通話時proximity會開始運作,臉接近螢幕時會變暗 過一會系統會進入休眠,CPU睡了只剩modem運作 不過由於proximity被設成wakeup source,所以也還在運作 只要臉一離開就馬上發出interrupt喚醒CPU 此時CPU會去執行proximity的driver,把proximity關閉 ※ 引述《LVE (強尼屁股)》之銘言: : 寶傑好 大家好 各位版友午安 : 最近在研究android的休眠狀態 : 爬了網路上的文章之後,大部分都是歸類下列三種狀態 : USER_AWAKE, //Full on status : USER_NOTIFICATION, //Early suspended driver but CPU keep on : USER_SLEEP // CPU enter sleep mode : 平時使用者操作時都是在AWAKE 狀態下 : 當按下螢幕鎖,或者休眠時間一到,會先進入notification模式 : 之後會查看有沒有app使用 wake lock : 當所有 wake lock都釋放之後,系統才會真正進入休眠 應該是說wake lock都釋放後才"可以"去睡 但不代表沒有任何wake lock就"一定"要睡 : 當系統偵測到Wakeup source之後才會回到AWAKE狀態 : -------------------以上為目前做功課得知的知識 : 那我的問題如下: : 何者為Wakeup source ??? : 當使用者按下電源鍵 = 觸發Wakeup source ?? : 來電時會觸發Wakeup source ??? : 使用者按下電源鍵會觸發這完全可以理解 : 但是來電時也會喚醒手機 : 那不就代表著手機根本沒有休眠嗎... : 因為接通電話的APP可能一直使用PARTIAL WAKE LOCK ?? : 想請教各位何種狀態下,才算真正進入休眠 : 而那些訊號算是wakeup source呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 36.226.128.86
LVE:非常感恩 謝謝大大的指教 02/22 01:07