【不專業迷你科普】
為甚麼總感覺Android跳通知比較慢?每次都是螢幕打開或是過一陣子才會一股腦跳出所有通知?
聊聊Android的Doze(瞌睡)機制!
latest #11
先解釋一下「不專業迷你科普」是什麼,總之就是我認為這知識很值得科普但我也沒有深入到我完完全全有把握的程度,我就會簡單寫迷你科普。
好了免死金牌講完了,進入正題吧 (X
蔚花🐔🔮🐚💎🎹✨☄️
6 months ago @Edit 6 months ago
首先開頭我必須先說,我不是要戰系統!
iOS和Android這兩家各有優劣,但根據我親身從Android跳蘋果,再從蘋果跳回Android,且目前仍然是雙棲的狀態下,我必須承認我非常有感受蘋果和Android接收通知速度的差異,iOS真的太及時了。

至於什麼樣的狀況會感受到Android通知很慢呢?答案就是,當你手機放在桌上靜止很久都沒動的時候!

沒錯,自從Android 6以後,Android系統就加入了一個特殊的機制,就是所謂的Doze模式,而所謂的Doze在英文的意思就是「瞌睡」,簡單來講就是讓手機進入一種打瞌睡的狀態。

而這樣的狀態是什麼樣的情況下會觸發?觸發Doze後會怎麼樣?Doze模式有啥好處?
別急我們一個一個來。
Q:什麼樣的狀態下會觸發Doze模式?
A:就是當你手機螢幕鎖起來,也沒有插上充電器的時候,其實Doze模式就會開始介入了。

Q:至於觸發Doze後會怎樣?
A:進入Doze模式的手機,就會把網路等等的連結斷開,並調降一些系統的頻率(CPU等等),然後過一陣子再恢復連接,把資料上傳下載,然後再斷網,反覆循環,就好像人類打瞌睡一樣,時醒時睡的,也因此當Doze恢復到清醒有網路的週期時,你才會收到通知。

但這個時候,我們又可以把Doze模式分為淺和深兩種,兩者會有不同的觸發條件和週期。
立即下載
蔚花🐔🔮🐚💎🎹✨☄️
6 months ago @Edit 6 months ago
淺Doze
觸發條件:螢幕鎖定、未插上充電器。
解釋:其實就是人類的半睡半醒啦,很像是今天是一堂很重要的課堂,但你很想睡覺,所以得要逼自己半夢半醒的狀態,這就是所謂的淺Doze模式。
這時候,手機在清醒和睡眠的週期會很快速,所以即便推播通知會有延遲,但也不會太明顯。

深Doze:
觸發條件:螢幕鎖定、未插上充電器、手機靜止。
解釋:其實就是上課直接睡死,但今天這堂課老師偶爾會突襲點人回答,所以當潛意識聽到「點人回答」個關鍵詞就會驚醒一下,然後再陷入昏睡,這就是所謂的深Doze模式。
這時候,手機會長時間處在睡眠的週期,只有很短的時間才會連上網路接收推播通知,甚至還會因為靜止越久睡眠周期會更拉長,也因此才會發生這次科普主題的問題——打開螢幕後或是隔一段時間才會一次把通知炸出來。
Q:那Doze模式的好處是什麼?
A:問就是省電!

進入Doze模式後除了斷網,其實還會針對CPU頻率等等去做調整,讓整隻手機的耗電量盡可能降到最低。
但各位可以放心的是,像是接電話(網路電話除外)、傳簡訊等等是不會受到影響的,因為走的是電信機制,不是網路,畢竟連基本的收發電話和簡訊都做不好的話,手機就不手機了嘛!
看到這裡,相信使用安卓的朋友也有大概了解到為甚麼手機通知收的不是那麼及時的原因了。
但是這裡還是要補充幾個點:

1、我有發現過去使用安卓7、8、9時,Doze模式雖然引入,但當時並沒有那麼明顯的感覺,根據我的研究,似乎是因為後期的app才逐步改用推播通知(後面會介紹)的方式發送通知,以往使用「背景服務」接收通知的app很多(例如早期的Line),所以不太會有漏通知的問題,當然也可能是因為Doze機制有改進。

2、有些人可能沒有特別的感覺,原因可能是手機不太離身,也就不會有長期靜止的時候,就會一直在睡眠周期較短的淺Doze。像我的習慣是坐著就會把手機放在一旁,如此就會長期靜止,自然通知就會收的慢,平時帶在身上延遲感就真的比較輕微。
蔚花🐔🔮🐚💎🎹✨☄️
6 months ago @Edit 6 months ago
3、有發現如果將需要比較及時接收消息的app排除在電量最佳化和背景限制之外時,通知依然會很及時(例如Line),因此是否也跟Doze白名單機制有關聯,這點我無法肯定。

4、Doze機制其實不是簡單的斷網降頻,還有很多複雜的機制,但科普我就簡單用斷網來概括,比較好理解。
多聊一下關於手機「通知」的科普。
那為甚麼像行事曆通知這種東西就不會被影響?Line或噗浪就會呢?
一方面簡單想就是沒有網路當然就收不到新訊息,另一方面就是這兩種是不同的通知型態,一種是本地通知,一種是推播通知。

行事曆是事先就儲存在手機內的資料,所以時間到的時候就會透過本機的通知方式發送通知,這點是不需要透過網路,只需要透過系統本身的通知機制就可以達成。
但像是Line、噗浪這種需要聯網的app呢?現在的作業系統都會限制app在背景的耗電量,聯網也會被限制,那這樣app要怎麼收通知呢?其實完完全全是推播伺服器的功勞。
可以把推播伺服器想像成郵局,當今天Line有新訊息,或是噗浪有新通知,這時候噗浪或是Line的伺服器將這封「通知信」,用掛號交給蘋果和Google的推播伺服器(也就是郵局),而當手機連上網路時(也就是在家時),才會把這封通知信交給手機,這時手機才會收到通知,這就是所謂的推播通知。

註:中國地區的Android手機由於無法存取Google服務,也就無法使用Google的推播伺服器,因此他們的app大多採用在背景執行服務的方式定時聯回app伺服器接收通知(早期Android大多數app也是採用這樣的機制接收通知,例如Line),因此會比較耗電一些,但我的消息不一定準確,僅供參考,有誤歡迎提出更正!

註:推播通知的概念我也不盡熟悉,也歡迎指證!
以上不專業迷你科普就到這裡啦,Doze機制也是近期我才了解到的,並沒有很深入,當作一個小知識即可,有誤也歡迎指證!

感謝看到這的大家!
https://blog.csdn.net/.....
補一下對岸大師的文章,雖然要解鎖,但可以稍微透過可以看到的內容了解一下大致的運作機制,會更加完善一些。
back to top