天天看點

Android4.0開機啟動速度優化過程經驗總結

Android4.0開機啟動速度優化過程經驗總結

      筆者EDE101使用的平台是:A10+android4.0.4+16GB NAND+1G DDR+(1280 X RGB X 800)。項目進入收尾階段,需要着重解決一下開機速度的問題,客戶反映還是太慢了一點,當然我們得列入高優先級重點攻關解決了。優化開機速度前,平均android啟動速度大概在39秒樣子,A10跑1G。以下測試開關機都是按電源鍵正常操作。系統突然掉電的情況下,重新開機檔案系統需要做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

40

37

平均:39.3

       關閉列印資訊,就是控制列印的級别,具體就是loglevel從預設的8修改為1,幾乎沒什麼列印資訊出來,修改後測試資料如下:

EDE101  2012-11-21軟體去掉序列槽列印輸出+16G Nand

35

34.6

36.2

33

32

11

12

13

14

15

16

17

18

19

20

36.3

34

36.7

平均: 35.5

     還是降低了蠻多的,有3.8秒多,确實列印資訊對啟動速度的影響還是蠻大的。那麼除了這個還可以查找哪些呢?筆者懷疑NAND,是以把原來兩片8GB NAND,去掉一片後,測試資料如下:

EDE101  2012-11-21軟體去掉序列槽列印輸出 + 8G Nand Flash

31

31.1

32.8

32.1

34.4

33.9

30.4

30.3

30.5

32.4

33.7

31.5

31.6

31.8

平均:31.9

又是有比較大的變化,是以說明啟動過程中nand的檢測、校驗、建表等還是很影響速度的。優化一下相應的部分應該可以提高幾秒的速度。

        筆者另外還有一個項目EDE103,平台:A10+android4.0.4+8GB NAND+512M DDR+(800 X RGB X 480),使用的電阻屏。去掉列印後,啟動速度資料如下:

EDE103  2012-11-21軟體去掉序列槽列印輸出

25.6

27

25

25.7

24.7

24.1

23.6

25.4

26.6

26.3

24.8

23.7

26.1

25.8

27.3

24.6

平均:25.38

     為什麼這個項目啟動速度會快這麼多呢?筆者開始百思不得其解。雖然知道從理論上,大分辨率的啟動時候LCD處理的資料要大很多,有一定影響,但是也差得有點太多了,感覺不正常。

筆者分析了一下兩者啟動列印資訊,

對E901-902 & EDE101列印資訊分析比較:

1、rtp比ctp少開銷300ms;

2、gc0308比GT2005少開銷640ms;

3、fm radio需要大概110ms(最新已經省去檢測步驟可以省掉100ms左右);

4、驅動加載完,執行android程式,執行到acc_open的時候,E901-902領先大概5.7秒

5、全程領先大概7秒,E901-902用時約24.8秒,EDE101用時約32秒;

6、E901-902 preloaded 2297 classes in 3355ms,但是EDE101 Zygote  (   81): ...preloaded 2297

classes in 5829ms,多需要2.47秒,原因不明;

7、“preloaded 379 resources in 4013ms” VS“preloaded

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

30.5(插了USB燒寫線)

25.5

27.4

27.2

28.4

27.7

28

26.8

28.5

26.9

平均:27.19

大幅度降低。

這樣一修改,啟動速度提高不少啊。那跟分辨率有直接關系的是什麼呢?很明顯,那就是LCD啊,LCD的資料啊!開機過程中,不就是開機動畫占的時間最多嘛!是以筆者做了一個實驗,資料如下:

EDE101  2012-11-27版本軟體+8G NAND+去掉開機動畫,跑預設android動畫+1280X800

27.5

28.1

26.2

26.5

平均: 27.1,大幅度下降,直接驗證了開機動畫影響很大,瓶頸也就在開機動畫。

那麼筆者就重新檢查了一下開機動畫的配置,圖檔是1280X800的,跟屏的分辨率是一樣大小的,每一秒播放15幀,動畫效果是挺不錯的。是以筆者做了相應的一個實驗,減少動畫圖檔,降低幀數,每秒播放6幀,同時把圖檔分辨率修改為剛好能框住有效動畫部分就好了,筆者裁剪到了220X220,這樣圖檔小了很多,測試資料如下:

EDE101  2012-11-27版本軟體+16G NAND+6p+1280X800

30.2

28.8

32.6

30.1

29.2

28.6

26.7

30.7

27.8

平均:29.1

從測試資料上看,速度是提高了不少,從優化開始前到現在提高了10秒多。把8G跟16G 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開發的朋友有一些幫助。

繼續閱讀