端午節要到啦~提前祝大家端午節快樂!你選擇宅著還是出去浪兒浪呢?
app啟動型別
1.冷啟動
1.應用程式自啟動裝置以來第一次啟動
2.系統殺死應用程式後再重新啟動
2.熱啟動
應用程式所有的activity仍駐留在記憶體中(後臺有應用程式程式),則該應用程式可以避免重複物件初始化,佈局inflate和渲染等
應用程式的熱啟動比冷啟動更簡單,開銷更低
3.溫啟動
1.使用者退出您的應用,又重新啟動它, 該過程可能會繼續執行,但應用程式必須通過呼叫onCreate()從頭開始重新建立activity
2.系統從記憶體中逐出您的應用程式(後臺無應用程式程式),然後使用者重新啟動它。該程式和activity需要重新啟動,但是可以傳遞給onCreate()的已儲存例項狀態。
app冷啟動過程
啟動過程
1.點選app啟動
2.app啟動後直接顯示空白視窗(基於主題)
3.建立app程式
4.建立app物件
5.啟動main thread
6.建立Activity
7.Inflate Views
8.佈局佈置
9.執行初始繪製
一旦應用程式程式完成第一次繪製,系統程式便會將當前顯示的背景視窗換掉,並將其替換為主要activity。
測量啟動時間
1.Displayed
在Android 4.4(API級別19)及更高版本中,logcat包含一個包含名為Displayed的值的輸出行。
此值表示啟動程式和完成在螢幕上相應Activity的繪製之間所經過的時間量。
2.Adb shell
adb [-d|-e|-s <serialNumber>] shell am start -S -W
com.example.app/.MainActivity
-c android.intent.category.LAUNCHER
-a android.intent.action.MAIN
複製程式碼
-c -a可選,用來指定和
輸出
Starting: Intent
Activity: com.example.app/.MainActivity
ThisTime: 2044
TotalTime: 2044
WaitTime: 2054
Complete
複製程式碼
WaitTime:前一個應用 Activity pause 的時間和新應用啟動的時間;
ThisTime:最後一個 Activity 的啟動耗時;
TotalTime:新程式的啟動和 Activity 的啟動的耗時;
3.reportFullyDrawn
使用reportFullyDrawn()方法來測量應用程式啟動和完成顯示所有資源和檢視層次結構之間的已用時間。
當您使用此方法時,logcat顯示的值是從建立應用程式物件到呼叫reportFullyDrawn()時所用的時間。
system_process I/ActivityManager: Fully drawn {package}/.MainActivity: +1s54ms
複製程式碼
工具
TrackView
TraceView 是 Android SDK 中內建的一個工具,它可以載入 trace 檔案,用圖形的形式展示程式碼的執行時間、次數及呼叫棧
使用方法
1.使用DMS的start method profiling 檢視trace資訊,停止則再次點選
2.使用程式碼
Debug.startMethodTracing(“hello”);
Debug.stopMethodTracing();
複製程式碼
5.0以及以上機子使用
Debug.startSimpleMethodTracing
複製程式碼
執行程式後 開啟DMS,File-open file
名稱含義:
(圖源來自網路侵刪)
優化
1.過重的app初始化
application oncreate
(1)去除過重的初始化
(2)延遲載入不必要的初始化
(3)耗時操作使用非同步
(4)延遲SharedPreferences初始化
2.過重的Activity初始化
避免
1.inflate大而複雜的佈局
2.阻塞磁碟上的螢幕繪圖或網路I / O。
3.載入和解碼bitmap。
4.柵格化VectorDrawable物件
5.初始化activity的其他子系統(?)
佈局方面
1.通過減少冗餘或巢狀佈局來展平檢視層次結構。
2.不要在啟動時不需要顯示部分UI。可以使用ViewStub佔位符, 在適當的時候動態載入。
資源初始化方面
1.開啟執行緒懶載入資源
2.允許展點陣圖顯示圖片,等圖片下載完成後再顯示具體圖片
參考資料
官網
https://developer.android.com/topic/performance/vitals/launch-time
app啟動優化
https://blog.csdn.net/SakuraMashiro/article/details/78986167
https://blog.csdn.net/eclipsexys/article/details/53044990
app啟動過程(原始碼分析)
https://www.jianshu.com/p/a5532ecc8377
app啟動時間分析
http://www.androidperformance.com/2015/12/31/How-to-calculation-android-app-lunch-time/
activity啟動優化
https://blog.csdn.net/u014700919/article/details/51178877
traceView
https://blog.csdn.net/u011240877/article/details/54347396
本人公眾號,會不定期更新!
首發公眾號,還有些額外的日常漫畫哦~
感謝您的喜歡
請多多關注和支援!
❤️