App 性能優化
RecyclerView
1、onBindViewHolder 運行在 UI 執行緒,不宜進行邏輯等耗時操作,只適合把資料填入視圖;
2、使用 support 包下面的 DiffUtil 區域重繪處理,DiffUtil(內部也是呼叫區域重繪方法)可以對比資料的差異,是否更改;
DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new DiffCallBack(oldDatas, newDatas), true); diffResult.dispatchUpdatesTo(mAdapter);
計算在主執行緒,如果資料量大需要放在執行緒中,通過 Handler 更新,
3、給可以復用 holder 的 RecyclerView 設定相同的 holder pool,在相同視圖中,不會重新創建 holder;
RecyclerView recyclerView = new RecyclerView(context); //layoutManager.setRecycleChildrenOnDetach(true);//LinearLayoutManager 需要額外設定 recyclerView.setRecycledViewPool(mPool);
4、資料快取,直接加載網路資料延遲比較重,加載快取中的資料;
5、優化代碼,盡量減少物件的創建,復用物件資源,比如監聽;
6、getExtraLayoutSpace 預加載,RecyclerView 只快取可見 view,滑動時初次加載會導致延遲卡頓,可以使用預加載處理,改變加載的滑動范圍;
7、嵌套 RecyclerView 時,通過 setInitialPrefetchItemCount 設定首次顯示個數,只有在嵌套且橫向串列才生效;
黑白屏
系統加載 app 時,會先顯示一個空白頁,空白頁背景色從應用主題中獲取,一般默認是白色,
1、通過給啟動頁單獨設定主題背景或顏色來避免,否則每個活動都會設定成一樣的啟動圖片,
設定背景顏色透明,如果啟動的活動耗時長,會導致啟動卡頓,需要避免啟動活動的耗時操作;
設定背景圖片,需要引入多張圖片來做螢屏適配,而且無法適配所有螢屏,所以一般使用 LayerDrawable,然后引入資源圖片,通過設定偏移量等引數達到適配效果,
2、減少 Application 耗時任務,
把一些非必要的第三方等操作單獨初始化,比如 IntentService,
app 啟動頁優化
apk 體積優化
布局優化
1、減少層次嵌套;
2、減少重復繪制,可以通過系統設定中打開 Show GPU Overdraw 設定查看,紅色表示需要優化;
3、使用 include(復用布局)、merge(減少嵌套)、ViewStub(按需求加載,只能執行一次),
包體積優化
1、使用 tint 避免多次匯入資源;
2、資源配置,ndk、resConfigs、代碼混淆等;
3、洗掉無參考資源,
ANR 處理
發生 ANR 時, 系統會在 /data/anr/ 目錄下生成一個 traces.txt 檔案,可以通過 adb 命令將其匯出到本地查看,一般的 ANR 都能定位到具體類,
1、iowait
日志中顯示 CPU 占用情況,其中 io 占用大部分,表示有頻繁的讀寫(資料庫、檔案)操作;
2、dalvik threads free
顯示記憶體不夠,一般會觸發 oom 例外,
網路優化
1、減少呼叫次數跟發送和接收資料包的大小,Android Studio 內置 Monitor 工具,可以查看接收和發送速度;
2、網路快取;
3、七牛資源圖片等加載適合的資源,比如壓縮圖,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/469748.html
標籤:Android