博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android内核开发:系统启动速度优化
阅读量:6590 次
发布时间:2019-06-24

本文共 1605 字,大约阅读时间需要 5 分钟。

hot3.png

在学习新知识的过程中,我一直很推荐结合实战任务去学习,只有经历实战,才能加深对理论知识的理解。系列已经写了八篇了,本文就结合前面的内容,给大家布置一个实战任务: 优化系统的启动速度。

 

这里我简单介绍一下优化的基本思路和涉及的文件,具体细节由大家自己在实践去摸索,提高自己Google能力和解决问题的能力。

 

Android系统的启动优化主要分为三大部分:

 

(1) Bootloader优化

(2)  Kernel的剪裁与优化

(3) Android OS部分的剪裁与优化

 

本文重点关注Android OS部分的启动优化,值得关注的优化点分别介绍如下:

 

1. 精简preload的classes和resource

 

前面介绍过,由于所有的Android应用程序都是从Zygote进程fork出来的,所以为了共享一些class和resourse资源,Zygote进程初始化过程中,会预先加载一些常用的class和资源文件到进程的内存中,这样其他应用fork出来后就不用再次加载了,从而提高了应用的启动速度。

 

这个过程是可以精简和优化的,你可以减少一些classes和resource的加载,从而加快系统的启动速度。本过程涉及到的文件:

 

frameworks/base/preload-classes

 

frameworks/base/core/res/res/values/arrays.xml

 

2.  精简native service和 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系统的启动速度优化就介绍到这里了,真心希望初学者们能够动手去实践,在实践中逐渐掌握内核开发的基本流程和技巧,然后慢慢深入理解系统的基本原理和理论知识。

 

结束语

 

免费学习更多精品课程,登录乐搏学院官网

或关注我们的官方微博,还有更多惊喜哦~

 

本文出自 “” 博客,请务必保留此出处

转载于:https://my.oschina.net/learnbo/blog/788962

你可能感兴趣的文章
XCODE GDB这个是老版本xcode,新版的是lldb
查看>>
客户与用户需求浅析
查看>>
VS不能设置断点可能的一个原因
查看>>
iscsi网络存储服务
查看>>
DB2递归查询
查看>>
多个生产者多个消费者,只有5个包子
查看>>
C#二进制流的序列化和反序列化操作
查看>>
XIB的是用
查看>>
ORACLE 10G RAC 10.2.0.5 删除节点
查看>>
Learning Data Structure_2_线性表、栈和队列
查看>>
JavaFx系列(二) Thread顯示進度窗的對話框
查看>>
Servlet获取全路径
查看>>
BAT频繁与移动医疗挂钩 预示行业即将爆发?
查看>>
我的友情链接
查看>>
制作JD的手动和自动轮播图片板块
查看>>
SQLite第九课 sqlite3_set_authorizer案例
查看>>
iconv 用法
查看>>
Redis应用实践:小红书海量Redis存储之道
查看>>
mii-tool查看网卡状态
查看>>
驱动外置+原版安装方式『XLOS_Windows8_Pro_X86纯净版_V1.0』
查看>>