Android 應用程式快速啟動的秘訣

來源:互聯網
上載者:User

Android系統架構和上層應用是類java(不是正統的sun java)開發的,實現了自己的java虛擬機器dalvik,既然用java虛擬機器和java開發,一般都會認為效率低下。其實不然,在基本主流的智能手機的軟體平台上,android的執行速度是最快的。

那麼android效率為什麼這麼的高呢?特別是一個應用程式的啟動時間很短,本文主要從以下個八方面進行分析:

1、 資源檔的最佳化讀取。

我們知道android在UI開發時有個很大的好處是xml檔案來描述UI,這樣有個好處是只要修改UI不用修改代碼就可以修改介面的布局、顯示風格和字型大小等。介面定義變得靈活方便。xml配置UI在qtopia運用也有但是這麼強大並且也不廣泛,因為xml檔案有個不足是解析xml的效率很低。

Android是怎麼做的呢?

Android在編譯的時候就把xml檔案進行了最佳化,android應用程式在解析時變得非常的高效。我們看到apk檔案解壓後會有個最佳化過的資源檔。

2、 安裝時進行最佳化dex檔案

Android的應用程式都打包成一個apk檔案,實際上就是一個zip檔案。系統第一次起來或應用程式第一次安裝時,系統就把apk檔案解壓了,把可執行檔dex最佳化成odex檔案並放在/data/dalvik-cache目錄下。最佳化後的dex檔案啟動速度會加快。這解釋了為什麼 android系統第一次啟動是比較慢,以後起來很快了。

可能有人會問:為什麼不在編譯時間直接最佳化呢?第⑤項會回答這個問題。

3、 製作資料庫

Android的圖形應用是載入整個sd卡內的所有映像的,但是為什麼很快呢?其實android提前把資料做成了資料庫,所以不用每次掃描整個這個sd卡,大大加快了啟動速度。

4、 高效的虛擬機器

Android是基於類java虛擬機器dalvik,一般的java虛擬機器是基於棧的,而dalvik是基於寄存器的。實事求是說我對兩者的區別瞭解不是很深入,不過網上有專門的相關文論進行分析。我的簡單理解是棧的實現方式相對容易,相關資料是在記憶體中的棧裡,而操作寄存器裡資料的速度明顯快與記憶體裡的資料處理。

5、 充分挖掘CPU的效能

Android剛出來的時候雖然支援arm cpu,實際上只支援armv5te的指令集的,因為android系統專門為armv5te 進行了最佳化,充分利用armv5te的執行流水線來提高執行的效率,這也是在500M的三星2440運行效果不是很好,而在200M的omap cpu上運行比較流暢的原因了,所以在最新的代碼中有專門針對x86和armv4的最佳化部分。

6、 最佳化和裁剪的libc庫

Libc庫幾乎是所以庫和程式的基礎,但是android沒有直接利用libc庫,而是自己開發了一個庫:bionic,它實現了libc庫的絕大多數的函數並根據平台進行了最佳化,但是有系統很少用並且消耗資源的少數函數是不支援的。它只有幾百k,節省了空間同時也提高了執行效率。實際上體現了 20-80原則,抓住少數重要的適當捨棄不必要的。

7、 充分利用linux系統特性

分析過linux核心的朋友知道,linux fork一個新的進程是非常高效的,利用了COW機制。Android是每個進程是個獨立的虛擬機器(聽說這麼設計是為安全考慮,某個時候進程崩潰了不會影響這個系統和其他進程。)android裡每個進程都是基於虛擬機器的,並且也要載入基本的庫,實際上這些都是共用。所以android啟動一個新的程式實際上並不消耗很多的記憶體和cpu資源。

同時android在後台有個empty process運行,實際上就是運行一個虛擬機器,當要啟動一個應用時就直接在其上繼續運行,qtopia也有這個機制。

Android系統在開機流程中:啟動虛擬機器—》啟動system server ?》啟動launcher。當初分析代碼時疑惑為什麼不直接啟動system server?(qtopia就是直接啟動server),實際上也利用了linux的這個特性。

這個特性說的比較簡略,不過要真的把他解釋清楚可能需要很大的篇幅。

8、 高效的paint機制

這個特性可能跟啟動關係不大,但是也是android高效的特性之一。介面變化時大部分實際上不是全屏內容變化的,只是局部變化,android 會根據變化的內容只是跟新局部的內容,也提高了效率。這個也提醒我們在開發應用程式時,重載paint方法時盡量不要paint全屏內容。

本文轉自www.35java.com

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

Tags Index: