android性能優化學習筆記(加快應用程序啟動速度:)


一:安卓中應用程序的啟動方式有兩種:

冷啟動:后台沒有該應用進程,系統會重新創建一個進程分配給該應用(所以會先創建和初始化Application類,再創建和初始化MainActivity,包括測量,布局,繪制等)

熱啟動:該應用的進程會保留在后台,在任務列表可以查看(back,home鍵按下后)(直接創建和初始化MainActivity,包括測量,布局,繪制等)

一個應用從新進程的創建到進程的銷毀,只會初始化一次Application.

應用的啟動時間:從點擊圖標到看到界面的第一幀。

二:

可以通過adb shell命令測量:adb shell am start -W [packageName]/[packageName.MainActivity]

這樣可以得到三個時間:

this time:類totaltime,除非啟動時開了一個透明的activity預先處理一些事再顯示出主activity

total time:創建進程,application初始化,activity初始化到顯示界面。

wait time:包括系統影響的耗時

三:

總的來說,冷啟動過程如下:

點擊app的啟動圖標時,安卓系統會從Zygote進程中fork創建出一個新的進程分配給該應用,之后會依次創建和初始化Application類、創建MainActivity類、加載主題樣式Theme中的windowBackground等屬性設置給MainActivity以及配置Activity層級上的一些屬性、再inflate布局、當onCreate/onStart/onResume方法都走完了后最后才進行contentView的measure/layout/draw顯示在界面上,所以直到這里,應用的第一次啟動才算完成,這時候我們看到的界面也就是所說的第一幀。

Application的構造器方法——>attachBaseContext()——>onCreate()——>Activity的構造方法——>onCreate()——>配置主題中背景等屬性——>onStart()——>onResume()——>測量布局繪制顯示在界面上

四:

減少冷啟動時的耗時:

1:在Application的構造器方法、attachBaseContext()、onCreate()中不要進行耗時的初始化,一些數據的預取放在異步線程中,可采取Callable實現;

2:sp的初始化  放在異步線程中處理;

3:對於mainActivity,因為在獲取道第一幀前,需要對contentView測量,布局,繪制;因此,盡量減少布局的層次,在生命周期的幾個函數里避免做耗時操作。

總的來說,原則就是:避免一些耗時的操作在主線程中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM