天天看點

android啟動優化解讀

性能優化包括很多方面,比如:啟動優化、布局優化、記憶體優化、卡頓優化、網絡優化、資料庫優化、記憶體洩漏優化、包體積優化等等。我們想要進行性能優化就要了解基本的原理,這篇文章針對啟動這一方面來談一談相關的原理知識。

一、冷啟動、溫啟動、熱啟動

首先了解下啟動的這三個概念,也是最常見的:

1、冷啟動。

冷啟動指的是該應用程式在此之前沒有被建立,發生在應用程式首次啟動或者自上次被終止後的再次啟動。簡單的說就是app程序還沒有,需要建立app的程序并啟動app。

比如開機後,點選螢幕的app圖示啟動應用。

冷啟動的過程主要分為兩步:

1)系統任務。加載并啟動應用程式;顯示應用程式的空白啟動視窗;建立APP程序

2)APP程序任務。啟動主線程;建立Activity;加載布局;螢幕布局;繪制螢幕

其實這不就是APP的啟動流程嘛?是以冷啟動是會完整走完一個啟動流程的,從系統到程序。

2、溫啟動。

溫啟動指的是App程序存在,但Activity可能因為記憶體不足被回收,這時候啟動App不需要重新建立程序,隻需要執行APP程序中的一些任務,比如建立Activity。

比如傳回Home後,又繼續使用其他的APP,時間久了或者打開的應用多了,之前應用的Activity有可能被回收了,但是程序還在。

是以溫啟動過程相當于執行了冷啟動的第二過程,也就是APP程序任務,需要重新啟動線程,Activity等。

3、熱啟動。

熱啟動就是指App程序存在,并且Activity對象仍然存在記憶體中沒有被回收。

比如app被切到背景,再次啟動app的過程。

是以熱啟動的開銷最少,這個過程隻會把Activity從背景展示到前台,無需初始化,布局繪制等工作。

二、了解到APP的基本概念,那麼我們如何檢測分析出啟動中出現的問題呢?

友盟+U-apm性能檢測工具

接入友盟U-APM後即可擁有實時、可靠、全面的應用崩潰、ANR、自定義異常等捕獲能力, 以及卡頓檢測、啟動分析、記憶體分析、網絡分析等性能監測能力,支援多方面智能告警監測。u-apm啟動分析功能包含啟動耗時、慢啟動情況、啟動崩潰資料。幫助開發者把控啟動狀态。

三、APP啟動環節有哪些可優化的點

三種啟動方式中,冷啟動經曆的時間最長,也是走完了最完整的啟動流程,是以我們再次分析下冷啟動的啟動流程,看看有哪些可以優化的點:

Launcher startActivity

AMS startActivity

Zygote fork 程序

ActivityThread main()

ActivityThread attach

handleBindApplication

attachBaseContext

Application attach

installContentProviders

Application onCreate

Looper.loop

Activity onCreate,onResume

縱觀整個流程,其實我們能動的地方不多,無非就是Application的attach,onCreate方法,Activity的onCreate,onResume方法,這些方法也就是我們的優化點。

最後再和大家回顧下今天說到的啟動優化方案:

消除啟動時的白屏/黑屏。windowBackground。

第三方庫懶加載/異步加載。線程池,啟動器。

預建立Activity。對象預建立。

預加載資料。

Multidex預加載優化。5.0以下多dex情況。

Webview啟動優化。預建立,緩存池,靜态資源。

避免布局嵌套。多層嵌套。

為了友善記憶,我再整理成以下三類,分别是Application、Activity、UI:

Application 三方庫,Multidex。

Activity 預建立類,預加載資料。

UI方面 windowBackground,布局嵌套,webview。

綜上所述,要進行啟動性能優化,就要對啟動相關原理知識有所了解,之後借助友盟u-apm應用性能檢測工具,幫助我們開發者進行啟動方面的分析檢測,再制定出針對性的優化方案,使APP品質更上一層樓。