RecyclerView的優化
前言:好久沒有寫文章了,主要是前端時間,最近都在學習C++和js,還有工作上的事情,還有就是懶,所以就沒有寫了。
今天,就寫一下關於RecyclerView優化的問題。
RecyclerView的使用,我就不多說了,我前面有講到。RecyclerView的複雜介面和效果,這個基本都有開源的,我就不寫了。
我就寫一點實用的的優化方案吧。
首先,優化?為什麼要優化?
那必然是,存在問題才需要優化,要是沒有問題,那優化個毛呀。
那麼通常是有哪些問題呢?
其實RecyclerView的問題,不外乎就是卡頓,介面佈局錯誤,載入慢這3個問題。(崩潰,載入不出來什麼的,那個是程式碼寫得有問題了)
那我們先來分析一下,可能是什麼原因造成上面的問題呢?
1.先說說介面佈局錯誤這個問題,這個問題,個人覺得,其實也主要是對介面佈局的設計有問題,通常,仔細看看XML佈局介面就能找到問題。
2.再來說說載入慢 這個問題。
這個其實也簡單,就是在繪製(渲染/重新整理)介面的時候,非介面的工作幹多了 。
什麼是非介面工作呢,比如,資料排序(正序,倒序等),篩選。比如資料格式化,string轉時間格式,long轉時間格式,大小寫轉換,Html.fromHtml(str).toString()等。這些單個出現,是沒有什麼感覺的,但是,數量增加了,那就不好說了。
所以,我們要做的就是,把這些不該介面乾的工作給摘出去,在介面繪製的時候,只幹介面繪製的工作 。
再想想,還有沒有其他情況也會造成介面載入慢的?
嗯,既然說到這個存在耗時的操作會慢(排序,格式轉換其實也算耗時的,當資料多的情況下),那麼我們是不是還可以再往裡面想多一點,比如,既然資料多了,會造成耗時,那麼我們就一次少載入一點數唄,就分頁載入。
3.卡頓問題
重頭戲來了,這個問題,算是一個大問題,也是面試最喜歡問的問題了。
首先,哪些情況不會卡頓,我們先把這些排除:簡單佈局,沒有視訊,沒有圖片,沒有表格,沒有巢狀,沒有倒計時,沒有頻繁更新,沒有動畫。這些基本不會出現卡頓,就不需要考慮了。
那麼與此對應的就可能會卡頓了:
佈局複雜:這個沒有辦法咯,只有寫佈局的時候,少巢狀,少用相對佈局,對用線性佈局,控制元件之間的關係儘量少。
含視訊:視訊是很佔資源的,所以注意,一定要到這個介面才載入視訊,一旦這個視訊item劃出了介面,就釋放。
含圖片:圖片儘量用小圖,網路圖片就懶載入(先用預設小圖佔位)
表格這個很少,我也沒遇到過。
巢狀:recyclerView.setNestedScrollingEnabled(false),記住這個方法吧,很有用的,多嘗試幾次就知道了。
動畫:這個和視訊是一樣的。
總結一下:以上就是我平時能遇到,我目前能想到的優化了,記錄一下,也分享一下。