2011年3月19日 星期六

[ Android ] 開機畫面 (1)

就我所知,Android開機畫面可分為幾個階段來實作:
1. Boot Loader
2. FrameBuffer Driver
3. init
4. bootanimation

若要開機畫面在使用者按下Power Button後的第一時間就顯示,Boot Loader必須先把畫面輸出到LCD上。

當Boot Loader帶起Linux Kernel後,FrameBuffer Driver initialize hardware時,可再輸出一張畫面。

當kernel結束後,會去執行"/init"。Android就是在這邊將"/initlogo.rle"這張圖輸出到LCD上。

在Android上,"/init"會去讀取"/init.rc"。如果仔細看看init.rc的話,應該會發現有這麼一行:service bootanim /system/bin/bootanimation。沒錯!這時候就會執行bootanimation這隻程式。

bootanimation有兩種方式來呈現開機動畫。
其一,確認系統中是否存在"/data/local/bootanimation.zip"這個檔案,以播放圖片方式來產生動畫效果。
其二,若不存在前述檔案,則使用系統中的"android-logo-mask.png"和"android-logo-shine.png"來產生文字 掃光的動畫效果。這兩個檔案在"android_source/frameworks/base/core/res/assets/images/"。
當然,你可以使用這兩種方式,改改圖片來達成你想要得效果,或者自己重寫一隻更炫的bootanimation。

上述的方法,若要達到seamless的話,還會有一些技術上的細節。


開機畫面這種東西,其實是在開機時間長的機器上才有其必要,為了不要讓user一直盯著黑畫面,還以為手機壞掉。
若開機時間只要一秒,開機畫面其實是多餘的。

沒有留言:

張貼留言