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

(1) Bootloader优化

(2) Linux Kernel的剪裁与优化

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

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

1. 精简preload的classes和resource

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

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

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.  小结

这里我给出一位国外的高手优化的结果作为比较和参考(我的优化结果只提高了20%的启动速度,远没有达到他的效果):

转:http://ticktick.blog.51cto.com/823160/1664754

Android内核开发:系统启动速度优化-Android OS启动优化(转)的更多相关文章

  1. Android内核开发:理解和掌握repo工具【转】

    本文转载自:http://ticktick.blog.51cto.com/823160/1653304 由于Android源码是用repo工具来管理的,因此,搞Android内核开发,首先要搞清楚re ...

  2. Android NFC开发(二)——Android世界里的NFC所具备的条件以及使用方法

    Android NFC开发(二)--Android世界里的NFC所具备的条件以及使用方法 NFC的应用比较广泛,而且知识面也是比较广的,所以就多啰嗦了几句,我还还是得跟着官方文档:http://dev ...

  3. uni-app&H5&Android混合开发三 || uni-app调用Android原生方法的三种方式

    前言: 关于H5的调用Android原生方法的方式有很多,在该片文章中我主要简单介绍三种与Android原生方法交互的方式. 一.H5+方法调用android原生方法 H5+ Android开发规范官 ...

  4. 使用 Android Studio 开发工具创建一个 Android 应用程序,显示一行文字“Hello Android”,并将应用程序的名称更改为“FirstApp”。

    需求说明: 使用 Android Studio 开发工具创建一个 Android 应用程序,显示一行文字"Hello Android",并将应用程序的名称更改为"Firs ...

  5. 使用 Android Studio 开发工具创建一个 Android 应用程序,并在 Genymotion 模拟器上运行

    需求说明: 使用 Android Studio 开发工具创建一个 Android 应用程序,并在 Genymotion 模拟器上运行 实现步骤: 打开 Android Studio,创建一个 Andr ...

  6. 【Android 应用开发】 Ubuntu 安装 Android Studio (旧版本|仅作参考)

    . 果断换Ubuntu了, Ubuntu的截图效果不好, 不能设置阴影 ... 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article ...

  7. Android 面试必备 - 系统、App、Activity 启动过程“一锅端”

    Android 系统启动过程 从系统层看: linux 系统层 Android系统服务层 Zygote 从开机启动到Home Launcher: 启动bootloader (小程序:初始化硬件) 加载 ...

  8. 写给Android App开发人员看的Android底层知识(2)

    (五)AMS 如果站在四大组件的角度来看,AMS就是Binder中的Server. AMS全称是ActivityManagerService,看字面意思是管理Activity的,但其实四大组件都归它管 ...

  9. 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)

    . 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...

随机推荐

  1. 20135208 第一次JAVA实验报告

    课程:Java程序设计          班级: 1352 姓名:贺邦                学号:20135208 成绩:             指导教师:娄嘉鹏       实验日期:2 ...

  2. Spring Cache和MyBatis的使用

    1.http://www.importnew.com/22757.html    spring chache缓存的使用. 2.http://www.importnew.com/22783.html   ...

  3. 第七章 美化DetailView界面

    本项目是<beginning iOS8 programming with swift>中的项目学习笔记==>全部笔记目录 ------------------------------ ...

  4. 如何用MAT分析Android应用内存泄露

    使用工具:Android Studio 2.0 Preview, Android Device Monitor, MAT(Memory Analyzer). 点击Android Studio工具栏上的 ...

  5. 安装VS2008无法更改安装路径解决方法

    一直用VS2012 以及 VS2012开发,但是他们都不支持Wince程序的开发,所有要安装VS2008.但是发现VS2008只能安装在C盘,要知道C空间很宝贵的. 经过查找资料发现系统中已经安装了V ...

  6. vitualbox 主机与虚拟机能相互访问的设置

    1. 桥接网卡 2. 界面名称:802.11n USB Wireless Lan Card 3. 混杂模式:全部允许 4. 接入网线打勾 5. 确定

  7. AngularJs-指令1

    前言: 前面写的有些乱,并且有些罗嗦,以后会注意的.希望我写的文章能帮助大家. 1,什么是指令 简单的说,指令是angularjs在html页面中建立一套自己能识别的标签元素.属性.类和注释,用来达到 ...

  8. redmine慢---提速方法

    最近readmine速度越来越慢.网上查了一下,把其自带的服务器webrick 换成为mongrel,可以解决这个问题,具体操作方法如下,方法: gem install mongrel 如果提示类似“ ...

  9. WebView与JavaScript的交互

    目录: 一.整体思路 二.简单例子实现过程        1.打开项目的asset目录,创建新的文件test.html        2.补充html代码:添加供本地调用的js方法.调用本地方法的js ...

  10. [转]ORACLE 中ROWNUM用法总结!

    原文地址:http://www.itpub.net/thread-824147-1-1.html 对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between ...