1.重用 convertView 用以避免重複建立 View,重複建立 View 代價較大,而且如果重用 view 不改變寬高,重用View可以減少重新分配快取造成的記憶體頻繁分配/回收;2. 避免在 getView 中有 重複呼叫的 findViewByIdfindViewById 的實現是遍歷,如果你定義的 View 越複雜代價越大。Google 推薦的做法是用 ViewHolder,然後儲存在 view 的 tag 中。現在 RecyclerView 也是強制使用 ViewHolder 了。3. 設定 View (如 TextView#setText )之前先對比資料是否有改變一般來說,【比較兩個資料的代價】遠小於【 View 的重繪的代價】4. 避免在 getView 函式中直接載入 Image 或做其他比較耗時的操作載入本地 Image 需要載入記憶體以及解析 Bitmap ,都是比較耗時的操作。使用者快速滑動列表時,會大量呼叫 getView ,而 getView 是在主執行緒中被呼叫的。如果你在 getView 函式中直接載入 Image 或做其他耗時操作,就會造成滑動比較卡。載入 ImageView 的解決方案就是開一個執行緒去把做這事。有很多第三庫可以做這事。5. ListView 中元素避免半透明半透明繪製需要大量乘法計算,在滑動時不停重繪會造成大量的計算,在比較差的機子上會比較卡。在設計上能不半透明就不不半透明。實在要弄的話我個人是用個比較偷懶的方法,是在滑動的時候把半透明設定成不透明,滑動完再重新設定成半透明。6. 儘量開啟硬體加速硬體加速提升巨大,避免使用一些不支援的函式導致含淚關閉某個地方的硬體加速。當然這一條不只是對 ListView。. 用 ListView 威力加強版 -- RecyclerView更多的新武將,更多的姿勢,更規範的使用,更好用的動畫,更加強大的變化
1.重用 convertView 用以避免重複建立 View,重複建立 View 代價較大,而且如果重用 view 不改變寬高,重用View可以減少重新分配快取造成的記憶體頻繁分配/回收;2. 避免在 getView 中有 重複呼叫的 findViewByIdfindViewById 的實現是遍歷,如果你定義的 View 越複雜代價越大。Google 推薦的做法是用 ViewHolder,然後儲存在 view 的 tag 中。現在 RecyclerView 也是強制使用 ViewHolder 了。3. 設定 View (如 TextView#setText )之前先對比資料是否有改變一般來說,【比較兩個資料的代價】遠小於【 View 的重繪的代價】4. 避免在 getView 函式中直接載入 Image 或做其他比較耗時的操作載入本地 Image 需要載入記憶體以及解析 Bitmap ,都是比較耗時的操作。使用者快速滑動列表時,會大量呼叫 getView ,而 getView 是在主執行緒中被呼叫的。如果你在 getView 函式中直接載入 Image 或做其他耗時操作,就會造成滑動比較卡。載入 ImageView 的解決方案就是開一個執行緒去把做這事。有很多第三庫可以做這事。5. ListView 中元素避免半透明半透明繪製需要大量乘法計算,在滑動時不停重繪會造成大量的計算,在比較差的機子上會比較卡。在設計上能不半透明就不不半透明。實在要弄的話我個人是用個比較偷懶的方法,是在滑動的時候把半透明設定成不透明,滑動完再重新設定成半透明。6. 儘量開啟硬體加速硬體加速提升巨大,避免使用一些不支援的函式導致含淚關閉某個地方的硬體加速。當然這一條不只是對 ListView。. 用 ListView 威力加強版 -- RecyclerView更多的新武將,更多的姿勢,更規範的使用,更好用的動畫,更加強大的變化