在学习新知识的过程当中,我一直很推荐结合实战任务去学习,只有经历实战,才能加深对理论知识的理解。《Android内核开发》系列已经写了八篇了,本文就结合前面的内容,给你们布置一个实战任务: 优化Android系统的启动速度。java
这里我简单介绍一下优化的基本思路和涉及的文件,具体细节由你们本身在实践去摸索,提升本身Google能力和解决问题的能力。linux
Android系统的启动优化主要分为三大部分:android
(1) Bootloader优化微信
(2) Linux Kernel的剪裁与优化学习
(3) Android OS部分的剪裁与优化优化
本文重点关注Android OS部分的启动优化,值得关注的优化点分别介绍以下:动画
1. 精简preload的classes和resourceui
前面介绍过,因为全部的Android应用程序都是从Zygote进程fork出来的,因此为了共享一些class和resourse资源,Zygote进程初始化过程当中,会预先加载一些经常使用的Java class和资源文件到进程的内存中,这样其余应用fork出来后就不用再次加载了,从而提升了应用的启动速度。.net
这个过程是能够精简和优化的,你能够减小一些classes和resource的加载,从而加快系统的启动速度。本过程涉及到的文件:3d
frameworks/base/preload-classes
frameworks/base/core/res/res/values/arrays.xml
2. 精简native service和Java service
前面介绍过,Android OS的启动本质上就是启动一系列的本地服务和Java服务,Android系统的全部功能都是经过这些服务间接提供的。
这些服务有不少并非必须启动的,根据业务需求能够去掉一些,本过程涉及到的文件:
system/core/rootdir/init.rc
frameworks/base/services/java/com/android/server/SystemServer.java
3. 精简预装的apk文件
系统启动过程当中,会扫描系统指定目录下的全部apk文件,这个过程也是很是耗时的,预装的apk文件越少,系统启动速度也就越快,所以,精简预装apk也是优化系统启动速度最重要的手段之一。
要想减小预装的apk文件,则须要分析系统的build文件,将不须要的apk编译选项删除掉,本过程涉及到的文件:
build/target/product/xxxx.mk
device/<company>/<product>/xxxx.mk
vendor/..../xxxx.mk
4. 减小内核的log打印级别
过多的log打印消息会显著地增长系统启动的时间,log打印级别有多处能够调整,推荐修改init.rc文件中的loglevel来改变log打印级别。
system/core/rootdir/init.rc
5. 其余优化手段
上面介绍的都是最经常使用的优化手段,其实还有不少其余的方法,简单列举以下:
(1) 优化启动动画,下降帧率和图片尺寸
(2) 精简系统,减少boot.img文件大小,能够显著减小启动过程当中加载和解压boot.img的时间
(3) 预先建立一些目录和文件,而不是在init过程当中建立
(4) 其余……
6. 小结
这里我给出一位国外的高手优化的结果做为比较和参考(个人优化结果只提升了40%的启动速度,远没有达到他的效果):
关于Android系统的启动速度优化就介绍到这里了,真心但愿初学者们可以动手去实践,在实践中逐渐掌握内核开发的基本流程和技巧,而后慢慢深刻理解系统的基本原理和理论知识。
结束语
免费学习更多精品课程,登陆乐搏学院官网http://h.learnbo.cn/
或关注咱们的官方微博微信,还有更多惊喜哦~
本文出自 “Jhuster的专栏” 博客,请务必保留此出处http://ticktick.blog.51cto.com/823160/1664754