日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android复杂列表滑动卡顿,Android 列表滑动性能优化总结

發布時間:2024/7/23 Android 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android复杂列表滑动卡顿,Android 列表滑动性能优化总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

列表滑動性能優化是一個老生常談的問題,最近在做項目的時候又遇到了列表滑動卡頓的問題,我在經過多次思考和嘗試后,終于找到了滑動卡頓的元兇,于是將經驗總結下來。

ViewHolder

先說說最常規的ViewHolder。ViewHolder的出現是為了解決在綁定視圖數據的時候使用findViewById遍歷視圖樹(以深度優先的方式)查找視圖引起耗時操作的問題,將第一次查找到的視圖放入靜態的ViewHolder中,以后綁定新數據時直接從ViewHolder中拿到視圖引用。在ListView中使用ViewHolder是基本的優化思路,當然最好的是直接使用RecyclerView,它自帶了ViewHolder。(推薦使用MultiType作為RecyclerView的Adapter,這個庫設計的很優美)

數據處理

很多時候從我們要對服務器上獲取下來的列表數據進行一次二次加工,以便轉化為我們界面上要顯示的數據,這些操作可能會比較耗時。比如字符串拼接、時間格式化等操作都是比較耗時的操作。比較好的實踐是將列表數據的加工在notifyDataSetChanged()之前在后臺線程做好,在Adapter中只做數據的綁定。

Item View 的變化

有時候我們會根據數據類型來控制一個View的顯隱,當給一個View設置setVisibility(View.GONE)的時候,會觸發布局的重新測量、布局、繪制等操作,若itemView的布局比較復雜,重新測量繪制會很耗時間,引起列表卡頓。這個時候可以將數據和itemView分解成不同的類型,根據類型來綁定對應的itemView,減少布局的重繪操作。

重用OnClickListener

通常我們為Button設置點擊事件的時候都是直接創建一個匿名內部類的對象(new OnClickListener{}),習慣了這種綁定事件的方式后我們可能在列表中也這么做。在列表滑動的時候會不停的重復創建新的OnClickListener的操作,舊的OnClickListener會被標記為需要垃圾回收,當需要回收的對象過多的時候會引起GC,導致列表卡頓??梢詣摻ㄒ粋€通用的OnClickListener,把數據放入Button的Tag中,根據id來判斷是哪個Button執行了點擊,來取出數據、執行不同的邏輯。

圖片的異步加載

用Glide、Picasso、Fresco等圖片異步加載框架。

界面優化

優化布局層級減少過渡繪制、優化布局方式提高布局效率。關于這點官方推薦使用ConstraintLayout,在我目前的實踐中,ConstraintLayout作為RecyclerView的Item布局的時候可能會有卡頓現象(主要是布局重繪引起的)。

總結

以上是生活随笔為你收集整理的android复杂列表滑动卡顿,Android 列表滑动性能优化总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。