android最全面的冷啟動優化方案
啟動流程
略…
耗時操作
- IO、資料庫操作
- 網路請求
- 第三方加載
啟動狀態
冷啟動
首次打開app或者app徹底銷毀后再次打開app,這也是我們進行啟動速度優化的主要方向
熱啟動
應用運行中按home鍵再打開應用
溫啟動
介于兩者之前:比如說用戶關閉應用又重新啟動應用,這是應用行程還沒被銷毀,或者系統主動釋放掉后臺應用,然后用戶就將它啟動,這時雖然要再重新執行onCreate,但是saveInstanceState實體已經保存,可以提高啟動速度
耗時監控
查看logcat日志
在日志中打出displayed過濾

adb命令
adb shell
am start -S -W 包名/.activity名

waitTime:包括前一個Activity pauseTime的時間和新應用啟動時間
thisTime:一連串啟動activity,最后指定的這個activity的耗時,比如:啟動的是MainActivity的程序中還啟動了SplashActivity,
totalTime:這個是最主要的,代表新應用啟動的所有耗時

使用profiler(>=android8.0)
使用profiler執行程式,會在手機里啟動ddms服務,會影響app的整體運行效率

-
sample java Methods
對java方法采樣,可能存在有方法未被采樣的情況(比如:0.1秒采樣一次,方法在0.05毫秒就執行完了)
-
Trace java method
記錄所有方法
Summary
根據時間線查看,便于發現呼叫是在何時發生

一般綠色的表示我們自己寫的代碼,從上往下看,橫軸越長表示耗時越長
Top Down
查看方法呼叫堆疊,一步一步往下

Flame Chart
根據耗時百分比查看呼叫堆疊,便于發現耗時最長的呼叫鏈
Bottom Up
與Top Down相反,便于查看耗時方法如何被呼叫
StrictMode(嚴苛模式)
- 一般只在debug使用
- 用于捕獲主執行緒中意外呼叫的IO操作和網路請求
- 某些第三方可能也會被嚴苛模式攔截,比如:阿里Aouter
//檢查執行緒
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectCustomSlowCalls()//自定義耗時操作
.detectDiskReads()//磁盤讀取操作
.detectDiskWrites()//磁盤寫入操作
.detectNetwork()//網路相關操作
// .detectAll()
.penaltyLog()
// .penaltyDialog()//違規彈窗提示
.build());
//檢測虛擬機
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectActivityLeaks()//檢測activity泄漏
.detectLeakedClosableObjects()//檢測物件泄漏
.detectLeakedSqlLiteObjects()//檢測sql物件泄漏
// .detectAll()//檢測全部
.penaltyLog()//列印日志
// .penaltyDeath()//違規崩潰(就是只要有被檢測到就崩潰)
.build());
優化方向
減少布局復雜度
-
約束布局 – 減少層級
-
viewSub – 懶加載
-
merge – 減少層級
-
異步加載 布局 (局限性比較大)
androidx 里有一個 AsyncLayoutInflater 的組件可以異步加載布局(需要另外導包)
掌閱 X2C
異步加載
在Application的某些初始化方法,可以使用子執行緒加載
混淆代碼
使用IdleHandler
在主執行緒空閑時執行業務
Looper.myQueue().addIdleHandler(new MessageQueue.IdleHandler() {
@Override
public boolean queueIdle() {
//此處添加處理任務
return false;
}
});
使用Arouter插件
//在app 的build.gradle 加入
//arouter插件提高初始化速度
apply plugin: 'com.alibaba.arouter'
//在project的 build.gradle 加入
classpath "com.alibaba:arouter-register:1.0.2"
使用MultiDex
原理與多行程無關,只是防止應用anr
主要是去掉了dex轉zip的步驟
m.alibaba.arouter’
//在project的 build.gradle 加入
classpath “com.alibaba:arouter-register:1.0.2”
##### 使用MultiDex
原理與多行程無關,只是防止應用anr
主要是去掉了dex轉zip的步驟
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/280727.html
標籤:其他
上一篇:Android_Google Play結算庫(應用內支付)billing 3.0接入實戰
下一篇:Android 熱更新集成
