Android性能優(yōu)化分幾點:
1:繪制優(yōu)化 2:內(nèi)存優(yōu)化 3:存儲優(yōu)化 4:穩(wěn)定性優(yōu)化 5:好點優(yōu)化 6: apk瘦身 7:工具
安裝python? 使用性能分析工具Systrace楞艾;性能分析工具還有TraceView硫眯;Profile GPU Rendering蜀细;
一:繪制優(yōu)化
場景? ??
? ????????????????1:UI? ?(繪制戈盈;刷新)
刷新幀率要與手機一致,太高太低都會影響屏幕的流暢性
? ? ? ? ? ? ? ? ? 2:啟動 (冷啟動归斤;溫啟動刁岸;熱啟動)
三種啟動方式,啟動慢了也不好
? ? ? ? ? ? ? ? ? 3:跳轉(zhuǎn)(頁面切換虹曙;前后臺切換)
Activity之間的切換,多使用Fragment切換矾踱,F(xiàn)ragment切消耗的資源要小很多疏哗,F(xiàn)ragment屬于輕量級;
前后臺切換的時候后有一些在運行的進程贝搁,線程,手動停掉雷逆,app切換到遷臺后,重新啟動关面;
? ? ? ? ? ? ? ? ? 4:響應(yīng)(按鍵;滑動)
用戶與手機之間產(chǎn)生卡頓捂齐,影響用戶留存率
根本原因
1:界面繪制?
繪制層太深奠宜;界面復(fù)雜(空間個數(shù)>80個);刷新不合理
2:數(shù)據(jù)處理
在UI線程處理數(shù)據(jù)压真;子線程數(shù)據(jù)處理占用cpu高滴肿,導(dǎo)致主線程拿不到時間片佃迄;內(nèi)存增加導(dǎo)致GC頻繁而引起的卡頓;
課外:安卓線程優(yōu)先級知識點鞏固堆缘,如果線程安卓使用到了線程普碎,盡量使用線程優(yōu)先級為background;
系統(tǒng)顯示原理
安卓應(yīng)用把經(jīng)過測量麻车,布局,繪制后的surface緩存數(shù)據(jù)唆鸡,通過SurfaceFlinger把數(shù)據(jù)渲染到顯示屏幕上枣察,通過按住哦的刷新機制來刷新繪制
應(yīng)用層負責(zé)繪制-》系統(tǒng)層負責(zé)渲染-》C/S架構(gòu)-》SurfaceFlinger(c++底層實現(xiàn)+Java API)
應(yīng)用層(Measure燃逻;Layout臂痕;Draw)握童,硬件加速GPU,比CPU耗電澡绩,兼容性問題肥卡,內(nèi)存大
系統(tǒng)層
Profile GPU Rendering 性能分析工具
藍色? 測量繪制時間
紅色? 執(zhí)行時間 Displya List
橙色? cpu處理時間
紫色? 將資源轉(zhuǎn)移到渲染線程時間
TraceView? 函數(shù)調(diào)用的次數(shù)
白屏優(yōu)化:
第一次進入app白屏
? ? ? ? 解決方案一:設(shè)置app主題,windowsContentOverlay值設(shè)置為null步鉴,windowsBackGround為空可以解決,但是點擊手機app啟動圖片會延遲一段時間喊递,所以這并不是完美解決方案
? ? ? ? 解決方案二:設(shè)置一個啟動圖阳似,啟動的時候白屏顯示的就是自己手動放置的啟動圖,比第一種體驗好俏讹。
? ? ? ??
? ??????Application 里面的onCreate執(zhí)行次數(shù)藐石,如果app里面的進程是三個即供,Application的oncreate會執(zhí)行三下,優(yōu)化點:
? ??????做主線程判斷逗嫡,非主線程不做初始化操作驱证。
? ??????MainActivity調(diào)用接口優(yōu)化,盡量不要執(zhí)行網(wǎng)絡(luò)請求抹锄,如果請求接口數(shù)過多,可以考慮存放到一個接口里面获高。
? ??????工作線程要設(shè)置優(yōu)先級念秧,AyncTask使用的是thread_priority_background? 自己創(chuàng)建的線程也要設(shè)置優(yōu)先級
? ??????數(shù)據(jù)緩存,避免從網(wǎng)絡(luò)獲取同樣數(shù)據(jù)的操作摊趾,盡量緩存本地
? ??????業(yè)務(wù)流程是否合理砾层,需要考慮
? ??????廢棄老代碼梢为,不需要用的老代碼,刪掉
如何查找優(yōu)化點:
開發(fā)階段使用BlockCanary或者ANRWatchDog等第三方監(jiān)控铸董,Method Tracing工具systrace minbledroid工具,還有l(wèi)int
避免IO操作蕴忆,序列化反序列化 網(wǎng)絡(luò)操作 布局嵌套