一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Android - android 之listview 優化方法

android 之listview 優化方法

2022-03-02 15:34石頭_起航 Android

這篇文章主要介紹了android 之listview 優化方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

這個東西做android是必備的,我相信你一定也會,但是我寫下來的目的就是記錄一下。

這個東西面試也很多會問到的,那么我們怎么回答那?

首先我認為有這么幾點:

1、listview在定義的時候寬和高最好固定一下,這樣可以減少listview測量次數,避免每次加載的時候都要去進行測量。

2、分頁加載,這也是優化之一,優化內存,還有體驗感,有興趣的可以試試大數據加載;

3、convertView 就是布局的復用;

4、ViewHolder的使用 目的減少findviewByID的次數;

下面代碼驗證一下3和4。

android 之listview 優化方法

?
1
2
3
4
5
public View getView(int position, View convertView, ViewGroup parent) {
  Log.e("========>>>>>", "getView-----position" + position);
  convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list, null);
  return convertView;
}

也就是說如果這樣寫的話每次都會進行布局的填充(滑動一下你就會發現每次都會打印日志),找到相應的布局,如果每次都去填充的話肯定浪費資源,所以我們這樣去寫

?
1
2
3
4
5
6
7
8
public View getView(int position, View convertView, ViewGroup parent) {
  if (convertView == null) {
    convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list, null);
    Log.e("========>>>>>", "getView-----position" + position);
  } else {
  }
  return convertView;
}

android 之listview 優化方法

你會看到日志始終是這幾個數據(如果你頁面顯示5個那個這里的數據就應該是六條會比顯示的數據多一條)。

ViewHolder

如果不使用viewHolder的話代碼就是這樣的

?
1
2
3
4
5
6
7
8
public View getView(int position, View convertView, ViewGroup parent) {
  if (convertView == null) {
    convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list, null);
  }
  TextView textView = convertView.findViewById(R.id.tv);
   textView.setText(mArrayList.get(position));
  return convertView;
}

很明顯這段代碼每次textview 都得findViewById;你可能會說你可以在if判斷里面findViewById啊,然后在if外邊賦值啊,你可以試試 你會發現很有意思的事情,上下滑動幾次,你會發現數據就會混亂,并且重復數據很多。這樣顯然是不符合我們的要求的;

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public View getView(int position, View convertView, ViewGroup parent) {
  ViewHolder viewHolder;
  if (convertView == null) {
    convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list, null);
    viewHolder = new ViewHolder();
    viewHolder.mTextView = convertView.findViewById(R.id.tv);
    convertView.setTag(viewHolder);
  } else {
    viewHolder = (ViewHolder) convertView.getTag();
  }
  viewHolder.mTextView.setText(mArrayList.get(position));
  return convertView;
}
 
public static class ViewHolder {
  private TextView mTextView;
}

這樣的基本復合我們的要求了,數據不會混亂并且復用了布局還減少了findViewById的次數,這樣大大減少了內存的使用。其實這樣做有個問題listview item中如果有圖片快速滑動你會發現錯位的問題,當然這些問題第三方的加載框架一般都可以解決。listview item盡量減少布局的嵌套 還有大圖片的加載 容易oom。listview 優化差不多就這些,如果還有其他的更好的優化方法,歡迎留言。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.jianshu.com/p/8923fa11135b

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 美女福利网站 | 激情视频图片小说qvdo | 欧美牛逼aa | 99精品国产自在现线观看 | 黑帮大佬与我的365天2标清中文 | 99亚洲自拍 | 成人国产精品一区二区不卡 | 亚洲男1069gay男猛男 | 亚洲高清在线天堂精品 | sihu国产午夜精品一区二区三区 | 日韩高清一区二区三区不卡 | 日本免费三片在线观看 | 欧美精品日韩一区二区三区 | 污到你怀疑人生 | 日本一区二区视频在线观看 | 国产精品欧美在线观看 | 天堂资源8中文最新版 | 色综合久久中文字幕综合网 | 日本搜子同屋的日子2国语 日本爽p大片免费观看 | 精品午夜中文字幕熟女人妻在线 | 91制片厂制作传媒网站 | 欧美极品摘花过程 | 暖暖免费高清完整版观看日本 | 亚洲欧美日韩另类在线一 | 9420高清视频在线观看网百度 | 青草视频网站在线观看 | 高h肉厨房| 奇米影视77777| 国产aaaaa一级毛片 | 久9视频这里只有精品123 | 成人中文字幕在线观看 | 3x免费高清视频 | 男模chinesegayxxxx | 手机国产乱子伦精品视频 | 91精品国产综合久久香蕉 | 成人在线视频国产 | 精品久久99麻豆蜜桃666 | 操儿子| 我与么公激情性完整视频 | 拍拍叫痛的无挡视频免费 | videojapan日本孕交孕 |