場(chǎng)景
一個(gè)他人開(kāi)發(fā)的模塊經(jīng)測(cè)試反饋在數(shù)據(jù)量較多時(shí)加載速度很慢海诲。
分析
- 檢測(cè)接口返回
在大數(shù)據(jù)量下接口也能迅速返回結(jié)果,排除后臺(tái)問(wèn)題 - 主代碼分析
簡(jiǎn)單分析主Activity文件未見(jiàn)明顯問(wèn)題粘秆。頁(yè)面有列表,且在大數(shù)據(jù)量下問(wèn)題明顯收毫,猜測(cè)listview問(wèn)題攻走。查看adpter view復(fù)用氓涣,果然未復(fù)用view,改之陋气。然而并未明顯改善問(wèn)題。 - 將listview 的 item layout 優(yōu)化引润,效果不明顯
-
運(yùn)行Android Profiler分析
進(jìn)入Android Profiler 選擇CPU監(jiān)測(cè)巩趁。點(diǎn)擊開(kāi)始監(jiān)測(cè)按鈕,對(duì)APP進(jìn)行操作淳附,結(jié)束監(jiān)測(cè)议慰。
- 分析結(jié)果
選擇Android Profiler底部的Call Chat 分析函數(shù)執(zhí)行時(shí)間。對(duì)系統(tǒng) API 的函數(shù)調(diào)用顯示為橙色奴曙,對(duì)應(yīng)用自有函數(shù)的調(diào)用顯示為綠色别凹,對(duì)第三方 API(包括 Java 語(yǔ)言 API)的函數(shù)調(diào)用顯示為藍(lán)色。主要關(guān)注綠色部分(具體含義參考 cpu-profiler)洽糟。onMeasure執(zhí)行太長(zhǎng)時(shí)間炉菲。
滾動(dòng)鼠標(biāo)滾輪放大,發(fā)現(xiàn)調(diào)用了N多 getView方法坤溃,遠(yuǎn)超過(guò)當(dāng)前屏幕顯示的item數(shù)量拍霜,可分析Listview并沒(méi)有緩存復(fù)用之前的View
-
總結(jié)原因
分析代碼,使用ScrollView 嵌套了自定義的Listview薪介,Activity渲染的時(shí)候會(huì)將整個(gè)Listivew全部渲染祠饺,有多少項(xiàng)渲染多少個(gè)item view ,不慢才怪
- 改正
CoordinatorLayout + AppBarLayout + RecyclerView