Android BOOT Time 最佳化
Rocky@20110317
Android的啟動和大多數的智能手機裝置都一個通病,都是啟動比較慢。這裡的速度最佳化並不是從原始碼的角度來最佳化,因為我相信Google已經做了非常多的工作。但是每個人的機器是不一樣的。特別是我們做MID,產品差別很大,有必要針對自己的產品做一些裁剪工作,用這個裁剪來最佳化我們的開機速度。
Android開機流程:
Bootloader
kernel
Init
Zygote
Service manager
具體分析:
Bootloader一般比較難操作,這裡也可以盡量少的做一些不必要的延遲操作。
Kernel:
這個地方分兩塊:
1:減少你系統不需要的Driver。這樣Kernel的大小自然就小了。載入速度自然就快了。
2:減少不必要的列印資訊。在正式版本中,我們需要把一些調試的資訊全部刪掉。具體要刪除那些,要看情況。這裡推薦一篇文章。
http://www.elinux.org/Boot_Time
其中說到的Kernel speedups ,方法有:
Disable Console - Avoid overhead of console output during system startup.
Disable bug and printk - Avoid the overhead of bug and printk. Disadvantage is that you loose a lot of info.
....
個人發現這兩點在我們的機器上表現是最為明顯的。
隨意,在kernel command string 中添加quiet,可以節約kernel啟動的10s的啟動時間。
具體位置:
/kernel/ make menuconfig
【Boot Options】、【Default kernel command string 】
末尾添加一句
quiet
Init:實際上就是做一些初始化的工作。包括load service ,zygote,下面是具體的介紹
Zygote:
它的原始碼在android_tcgit/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
會做一些preloadClasses ,preloadResources的動作。我們可以通過在開機的時候
adb shell logcat -s Zygote I
查看這個部分的列印資訊。可以看出在preloadClasses的時候耗時也是蠻長的。但是不建議修改。否則就是牙膏效益,後面的載入時間更長。有很多的文章講在這裡節約時間。
我奉勸各位還是不要去動它,之所以說到這裡,是因為很多的都會說。
Service Manager.
這個裝載分成兩個部分,一個是frameworks/base/services/java/com/android/server代碼裝載,一個是在init.rc類似的檔案中裝載。
記住,刪除我們不需要的東西。例如,我們這雷根本沒有BlueTooth。所以刪除和藍芽相關的項目。
總之,android的啟動結構已經最佳化了很好的了。我們關鍵的一點就是去掉一些沒有必要的東西,例如列印資訊,不需要的驅動和服務啟動項。
參考資料:
http://www.elinux.org/Boot_Time
http://elinux.org/Improving_Android_Boot_Time
http://blog.csdn.net/jackyu613/archive/2010/11/30/6044297.aspx
http://elinux.org/Improving_Android_Boot_Time_Outline