應用程序的通知推送可讓使用者實時收到重要的訊息,但Google提到,這是一個常被忽略,卻常會消耗許多電力的緣由,像是高優先等級的通知,能夠將手機從瞌睡省電模式(Doze mode)喚醒,而且從網絡擷取推送通知的數據,而這個動做很容易把手機的電量榨乾。後端
推特認爲,電池壽命屬於行動用戶體驗重要的一部分,所以一直以來,他們盡力的下降應用程序對用戶手機電池電力的影響,而在推送通知功能上也作出了改變。在今年推特將通知訊息函式庫從Google雲端推送(GCM)遷移到了Firebase雲端推送(FCM),因爲FCM提供更多的功能,讓推特能夠掌握電力信息,也可使用getPriority()以及getOriginalPriority()這類API,監控FCM的訊息優先度是否遭到系統降級。安全
推特的後端也會將通知設定,配置爲適當的優先等級,以確保高優先等級的FCM訊息,僅用於產生使用者真正想要快速看見的通知,推特表示,他們發送的通知只有一小部分設置爲高優先等級。而在Android 9(Pie版)才加入的應用程序等待桶(App Standby Buckets),會根據應用程序所屬的存儲桶,對接收高優先等級的訊息數量加以限制,所以高優先等級的訊息應該留在更有可能與使用者產生互動的通知,任意使用於不須要用戶互操做的訊息,一旦應用程序耗盡應用程序等待桶中的配額,後續真正緊急的訊息將會被降級成通常等級,在裝置進入瞌睡省電模式被延遲。網絡
推特爲確保訊息傳送的質量,收集了應用程序傳送與交付訊息的時間,對通知優先度進行統計分析。雖然推特應用程序在2%的裝置中,被分配在應用程序等待桶中的頻繁(Frequent)或是更低等級的桶中,可是沒有任何通知訊息被降級,另外,當推特後端傳送高優先等級FCM訊息時,推特在86%的裝置的應用程序等待桶被分配到了活躍(Active)等級,推特提到,這表明他們對於訊息優先等級分配與用戶習慣一致。設計
而推特也提到,預先提取資料是一種流行的作法,能夠增長使用者在收到通知以後的體驗,但這個技術必需要在通知的有效酬載(Payload)加入一段元數據,當發送通知時,應用程序利用有效酬載數據啓動網絡呼叫,以在顯示通知以前,下載更多的資料。blog
FCM有效酬載有最大4KB限制,當須要更多數據來產生豐富的通知時,須要使用數據預先提取技術。但這項技術有其缺點,除了會延遲通知推送外,也會增長裝置耗電量。推特將這樣的通知數量降到1%如下,並在無可避免的狀況下,使用JobScheduler或WorkManager對任務進行調度,以免後臺執行限制問題。開發
Android在Oreo版本以後,加入了通知頻道(Notification Channels)功能,在考慮用戶體驗與節能的狀況下,推特的Android版應用程序有9個通知頻道,其中只有直接訊息傳遞、緊急狀況和安全性被設計爲高重要程度,大多數的頻道重要性設置爲低以減小干擾。get
開發者能夠透過謹慎的處理通知推送、限制預先提取以及設計通知頻道來改善應用程序的耗電量,藉以延長用戶裝置的續航力。
文章轉自:一塊兒勝博發it