<b></b>
張揚:小米科技系統工程師,專注作業系統機制研究以及軟體架構和接口設計,曾經在索尼和創新工廠從事系統底層及中間件的研發,加入小米後主要負責安全和系統優化方面的研發及技術架構搭建。
小米的MIUI系統是針對Android深度定制的作業系統,在Android開放的設計之下,各個應用有了充分的發揮空間,但是與此同時,系統資源(如
記憶體,電量等)也在應用的無節制使用之下顯示出疲态。此次讨論的主題就是站在作業系統設計者的角度如何在應用權限和系統資源之間做平衡的。以下來分享精彩内容。
<b>移動系統現狀</b>
圖1
如圖1,智能手機已經普及,每個人平均每月要經常使用6.8個APPS,近一半的移動網際網路使用者目前将手機作為他們的首選或唯一的上網裝置。
移動系統和應用之間到底是一個什麼關系呢?不論作業系統還是應用,最終都是要服務于使用者的,使用者需求就是一個大的戰場,各個APP是直接和使用者去互動,服務于使用者的。那麼手機就是一個大戰場,應用程式就好比軍隊, 作業系統就是後勤。
APPS都是各自為戰,完全不考慮其它,但手機資源是有限的。要想讓手機的作業系統跑的很順利,這就需要對電量,流量,記憶體進行優化。
自啟動涉及到方方面面的,是一個比較宏觀的概念,移動應用自啟動,前1000熱門應用,70%以上需要自啟動。
圖2電流儀測手機耗電圖
如圖2,用随機裝的50個應用進行測試,觀察自啟動管理前後的耗電圖。應用自啟動時,我們會設定一些比較常用的(比如微信),還有另一些預設是不會自啟動的,使用者可以自己手動把自啟動打開,如果不設定自啟動,有時會出現消息下達不及時而導緻消耗,那麼自啟動是不是完美方案呢?單從系統環境去做這個事情還是比較苦難的,因為有各式各樣的應用,它們的行為也千姿百态的,需要運作的資料量很大,系統不會有太多政策去判斷的。更好的方式是靠大家配合,各個應用應該把系統資源的消耗和占用作為自己的應用是否好的一個名額。
<b>電量優化</b>
圖3 andriod原生态
圖4 MIUI V5
安卓為什麼會費電,主要原因是CPU沒有斷,是以我們關注的是當手機不用時怎麼樣控制cpu的喚醒,圖3中安卓原生态時的幾個應用,它們不知道彼此的存在,它們隻會根據自己的邏輯判斷什麼時候喚醒CPU,導緻耗電一直很高,CPU很難進入休眠狀态。圖4的MIUI
V5對齊喚醒機制,在各個應用設定自己喚醒的時候,V5進行統一判斷,在某個門檻值之内把一些應用調到一起喚醒,經過測試如圖5,耗電量降低了很多。
圖5待機耗電測試
圖6 iOS 7 在2013年9月WWDC釋出同樣的功能
理想方案:在後面的改善過程,我們可能會加一個獨立的小晶片,主cpu還是一樣的,小晶片的作用是監控資料的喚醒。此外,我們會把所有的鬧鐘操作統一由系統接管,你隻需要告訴系統你什麼時候要醒,系統可能會給使用者發一些狀态答案。
<b>流量優化</b>
流量消耗原因:背景應用默默跑流量。
解決方案:開源節流。開源:有更多可以使用的流量;節流:控制應用的聯網行為。
<b>記憶體優化</b>:
基于背景APP的記憶體優化;調整ActivityManagerService的參數,利用IActivityManager提供的接口對程序進行控制;ZRAM。
釋放OPENGL的資源;将dalvik占用記憶體的bitmap交換到EMMC;将dalvik占用的空閑的實體記憶體釋放出來;設定合适的MAX_TASK, MAX_HIDDEN_APPS;将不經常使用的程序占用盡量少的記憶體,占用盡量多的緩存。
PPT下載下傳位址:http://club.alibabatech.org/resource_detail.htm?topicId=162