Android BOOT Time 优化

来源:互联网 发布:网络授权申请书 编辑:程序博客网 时间:2024/05/19 05:39

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

原创粉丝点击