Android4.0开机启动速度优化过程经验总结

简介: Android4.0开机启动速度优化过程经验总结         笔者EDE101使用的平台是:A10+android4.0.4+16GB NAND+1G DDR+(1280 X RGB X 800)。

Android4.0开机启动速度优化过程经验总结

 

      笔者EDE101使用的平台是:A10+android4.0.4+16GB NAND+1G DDR+(1280 X RGB X 800)。项目进入收尾阶段,需要着重解决一下开机速度的问题,客户反映还是太慢了一点,当然我们得列入高优先级重点攻关解决了。优化开机速度前,平均android启动速度大概在39秒样子,A101G。以下测试开关机都是按电源键正常操作。系统突然掉电的情况下,重新开机文件系统需要做recovery,在EDE101 16G NAND版本上需要多花4-5秒启动时间,文件系统使用的是EXT4,这种情况类似电脑掉电关机,重启需要扫描检测硬盘一样。

/*****************************************************************************************************/
声明:本博内容均由http://blog.csdn.net/sundesheng125原创,转载请注明出处,谢谢!

/*****************************************************************************************************/

 

优化前测试数据:

EDE101  2012-11-21发布的软件+16G Nand

1

2

3

4

5

6

7

8

9

10

39

42

36

38

41

41

40

37

40

39

平均:39.3

       关闭打印信息,就是控制打印的级别,具体就是loglevel从默认的8修改为1,几乎没什么打印信息出来,修改后测试数据如下:

EDE101  2012-11-21软件去掉串口打印输出+16G Nand

1

2

3

4

5

6

7

8

9

10

35

34.6

37

36.2

33

36

36

32

33

36

11

12

13

14

15

16

17

18

19

20

36.3

34

38

35

39

36

35

36.7

37

35

平均: 35.5

     还是降低了蛮多的,有3.8秒多,确实打印信息对启动速度的影响还是蛮大的。那么除了这个还可以查找哪些呢?笔者怀疑NAND,因此把原来两片8GB NAND,去掉一片后,测试数据如下:

EDE101  2012-11-21软件去掉串口打印输出 + 8G Nand Flash

1

2

3

4

5

6

7

8

9

10

31

31.1

32.8

31.1

32.1

32.8

34.4

33.9

30.4

30.3

11

12

13

14

15

16

17

18

19

20

30.5

32.4

33.7

31.5

31

31.5

32.8

31.6

31.8

31.6

平均:31.9

又是有比较大的变化,因此说明启动过程中nand的检测、校验、建表等还是很影响速度的。优化一下相应的部分应该可以提高几秒的速度。

        笔者另外还有一个项目EDE103,平台:A10+android4.0.4+8GB NAND+512M DDR+(800 X RGB X 480),使用的电阻屏。去掉打印后,启动速度数据如下:

EDE103  2012-11-21软件去掉串口打印输出

1

2

3

4

5

6

7

8

9

10

25.6

27

25

25.7

24.7

24.1

23.6

27

25.4

26.6

11

12

13

14

15

16

17

18

19

20

26.3

24.8

23.7

26.1

25.8

27.3

23.7

24.1

25.6

24.6

平均:25.38

     为什么这个项目启动速度会快这么多呢?笔者开始百思不得其解。虽然知道从理论上,大分辨率的启动时候LCD处理的数据要大很多,有一定影响,但是也差得有点太多了,感觉不正常。

笔者分析了一下两者启动打印信息,

E901-902 & EDE101打印信息分析比较:

1rtpctp少开销300ms

2gc0308GT2005少开销640ms

3fm radio需要大概110ms(最新已经省去检测步骤可以省掉100ms左右);

4、驱动加载完,执行android程序,执行到acc_open的时候,E901-902领先大概5.7

5、全程领先大概7秒,E901-902用时约24.8秒,EDE101用时约32秒;

6E901-902 preloaded 2297 classes in 3355ms,但是EDE101 Zygote  (   81): ...preloaded 2297 classes in 5829ms,多需要2.47秒,原因不明;

7、“preloaded 379 resources in 4013ms VSpreloaded 379 resources in 2742ms”

8、“PackageManager(  143): Time to scan packages: 3.081 seconds” VS

“PackageManager(  144): Time to scan packages: 3.589 seconds

笔者首先把驱动层能优化的地方尽量优化了,能缩短的尽量缩短,有些可以放到系统进入桌面后加载的驱动就可以放到进入桌面后再加载,比如camera,这样也能通过这种手段来加快启动速度。

但是为什么加载同样数据的classes会差两秒多呢?CPU跑的速度都是一样的。笔者做了一个实验,把EDE101大分辨率的屏当着小分辨率的屏来使用,修改为800X480,测试数据如下:

EDE101  2012-11-26版本软件+8G NAND+分辨率修改为800 X 480+LCD DCLK 33MHz

1

2

3

4

5

6

7

8

9

10

30.5(插了USB烧写线)

30.5(插了USB烧写线)

25.5

27.4

27.2

28.4

27.7

27.4

28

26.8

11

12

13

14

15

16

17

18

19

20

28.5

27.4

26.3

28.4

26.1

27

27.3

26.1

26.9

27


平均:27.19 大幅度降低。

这样一修改,启动速度提高不少啊。那跟分辨率有直接关系的是什么呢?很明显,那就是LCD啊,LCD的数据啊!开机过程中,不就是开机动画占的时间最多嘛!因此笔者做了一个实验,数据如下:

EDE101  2012-11-27版本软件+8G NAND+去掉开机动画,跑默认android动画+1280X800

1

2

3

4

5

6

7

8

9

10

25.5

26.6

28

27.5

28.1

26.2

27

26.9

26.5

27.5

平均: 27.1,大幅度下降,直接验证了开机动画影响很大,瓶颈也就在开机动画。

 

那么笔者就重新检查了一下开机动画的配置,图片是1280X800的,跟屏的分辨率是一样大小的,每一秒播放15帧,动画效果是挺不错的。因此笔者做了相应的一个实验,减少动画图片,降低帧数,每秒播放6帧,同时把图片分辨率修改为刚好能框住有效动画部分就好了,笔者裁剪到了220X220,这样图片小了很多,测试数据如下:

EDE101  2012-11-27版本软件+16G NAND+6p+1280X800

1

2

3

4

5

6

7

8

9

10

30.2

28.8

32.6

30.1

29.2

28.6

26.6

26.7

30.7

27.8

平均:29.1

从测试数据上看,速度是提高了不少,从优化开始前到现在提高了10秒多。把8G16G nand启动速度的差异修正后,那速度就可以达到26-27秒左右。

 

Android开机速度的优化是一个相当重要的课题,也是非常耗精力的事情。有时投入很多时间,也不一定能得到想要的结果。如果时间充分,还可以从预加载类来做优化,还有启动的service,把不需要的都可以屏蔽掉,这样肯定也能加快启动速度,不过这个需要很多时间精力的投入。笔者最后总结了几条加快启动速度的方法,单独用,一起上,都有作用。具体如下:

1、  关闭掉项目生产发布软件的打印;

2、  开机动画图片尽量小一些,播放的帧率低一点;

3、  能放到系统进入桌面后加载的驱动可以放到进入桌面后加载,可以从收到boot completed消息后执行,或者在运行launcher的程序中来触发;

4、  减少不需要的预加载类;

5、  去掉不需要的service

6、  减少预装的apk数量;

7、  驱动里delay可以用sleep替换的就替换一下;

8、  在init.rc里面以及其他平台init.platXX.rc里面把不需要的service,都屏蔽掉不加载;

9、  在内核中没使用到的驱动、配置不要编译进内核;

10、          在kernel前面boot里面,公版的功能可能全一些,针对自己产品不需要的,可以屏蔽一些,也能加快一点启动速度。

  

Android开机速度的优化是始终还是有进步的空间,多努力一些,还是可以再加快一点。笔者的一点点经验、拙见仅供参考,平台的CPU跑得快这些问题就相对没那么突出,但是方法还是有用的,希望对android开发的朋友有一些帮助。

 

目录
相关文章
|
Linux Android开发 C语言
在android系统上写C语言程序--开机启动该程序不进入安卓系统
     今天要写的这篇博文意义重大,也是网上很少有的,这是在我工作中学会的一项技术,当然,它也是由简单的问题组合而来的。如何在安卓中写C语言程序,调试安卓驱动,测试程序的的一项重要技能,下面我就不说废话了,直接说实用的,怎么用这个东西。
1361 0
|
Android开发 开发工具
Android开机启动Activity或者Service方法(转载)
这段时间在做Android的基础开发,现在有一需求是开机启动,按照网上某些博文教程做了下,始终不成功,一开机总是提示所启动的应用程序意外终止,于是参考了Android SDK doc,终于解决问题,下面把自己的经验分享给大家。
888 0
|
Android开发 数据格式 XML
android 开机启动服务。
今天我们主要来探讨android怎么让一个service开机自动启动功能的实现。Android手机在启动的过程中会触发一个Standard Broadcast Action,名字叫android.intent.action.BOOT_COMPLETED(记得只会触发一次呀),在这里我们可以通过构建一个广播接收者来接收这个这个action.下面我就来简单写以下实现的步骤:       第一步:首先创建一个广播接收者,重构其抽象方法 onReceive(Context context, Intent intent),在其中启动你想要启动的Service或app。
1251 0
|
Android开发 数据格式 XML
android 开机启动
引用:http://www.cnblogs.com/fbsk/archive/2011/10/10/2205316.html 背景知识:当Android启动时,会发出一个系统广播,内容为ACTION_BOOT_COMPLETED,它的字符串常量表示为 android.intent.action.BOOT_COMPLETED。
807 0
|
6天前
|
IDE Android开发 iOS开发
探索Android与iOS开发的差异:平台选择对项目成功的影响
【9月更文挑战第27天】在移动应用开发的世界中,Android和iOS是两个主要的操作系统平台。每个系统都有其独特的开发环境、工具和用户群体。本文将深入探讨这两个平台的关键差异点,并分析这些差异如何影响应用的性能、用户体验和最终的市场表现。通过对比分析,我们将揭示选择正确的开发平台对于确保项目成功的重要作用。
|
19天前
|
Android开发 开发者 Kotlin
探索安卓开发中的新特性
【9月更文挑战第14天】本文将引导你深入理解安卓开发领域的一些最新特性,并为你提供实用的代码示例。无论你是初学者还是经验丰富的开发者,这篇文章都会给你带来新的启示和灵感。让我们一起探索吧!
|
3天前
|
开发框架 移动开发 Android开发
安卓与iOS开发中的跨平台解决方案:Flutter入门
【9月更文挑战第30天】在移动应用开发的广阔舞台上,安卓和iOS两大操作系统各自占据半壁江山。开发者们常常面临着选择:是专注于单一平台深耕细作,还是寻找一种能够横跨两大系统的开发方案?Flutter,作为一种新兴的跨平台UI工具包,正以其现代、响应式的特点赢得开发者的青睐。本文将带你一探究竟,从Flutter的基础概念到实战应用,深入浅出地介绍这一技术的魅力所在。
18 7
下一篇
无影云桌面