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

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Android - android 之listview 優(yōu)化方法

android 之listview 優(yōu)化方法

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

這篇文章主要介紹了android 之listview 優(yōu)化方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

這個(gè)東西做android是必備的,我相信你一定也會(huì),但是我寫下來(lái)的目的就是記錄一下。

這個(gè)東西面試也很多會(huì)問(wèn)到的,那么我們?cè)趺椿卮鹉牵?/p>

首先我認(rèn)為有這么幾點(diǎn):

1、listview在定義的時(shí)候?qū)捄透咦詈霉潭ㄒ幌拢@樣可以減少listview測(cè)量次數(shù),避免每次加載的時(shí)候都要去進(jìn)行測(cè)量。

2、分頁(yè)加載,這也是優(yōu)化之一,優(yōu)化內(nèi)存,還有體驗(yàn)感,有興趣的可以試試大數(shù)據(jù)加載;

3、convertView 就是布局的復(fù)用;

4、ViewHolder的使用 目的減少findviewByID的次數(shù);

下面代碼驗(yàn)證一下3和4。

android 之listview 優(yōu)化方法

?
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;
}

也就是說(shuō)如果這樣寫的話每次都會(huì)進(jìn)行布局的填充(滑動(dòng)一下你就會(huì)發(fā)現(xiàn)每次都會(huì)打印日志),找到相應(yīng)的布局,如果每次都去填充的話肯定浪費(fèi)資源,所以我們這樣去寫

?
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 優(yōu)化方法

你會(huì)看到日志始終是這幾個(gè)數(shù)據(jù)(如果你頁(yè)面顯示5個(gè)那個(gè)這里的數(shù)據(jù)就應(yīng)該是六條會(huì)比顯示的數(shù)據(jù)多一條)。

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;你可能會(huì)說(shuō)你可以在if判斷里面findViewById啊,然后在if外邊賦值啊,你可以試試 你會(huì)發(fā)現(xiàn)很有意思的事情,上下滑動(dòng)幾次,你會(huì)發(fā)現(xiàn)數(shù)據(jù)就會(huì)混亂,并且重復(fù)數(shù)據(jù)很多。這樣顯然是不符合我們的要求的;

?
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;
}

這樣的基本復(fù)合我們的要求了,數(shù)據(jù)不會(huì)混亂并且復(fù)用了布局還減少了findViewById的次數(shù),這樣大大減少了內(nèi)存的使用。其實(shí)這樣做有個(gè)問(wèn)題listview item中如果有圖片快速滑動(dòng)你會(huì)發(fā)現(xiàn)錯(cuò)位的問(wèn)題,當(dāng)然這些問(wèn)題第三方的加載框架一般都可以解決。listview item盡量減少布局的嵌套 還有大圖片的加載 容易o(hù)om。listview 優(yōu)化差不多就這些,如果還有其他的更好的優(yōu)化方法,歡迎留言。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产高清在线视频一区二区三区 | 喷奶水榨乳ova动漫无修 | 俄罗斯bbbbbbxxxxxx | 狠狠色狠狠色综合系列 | 18未年禁止免费观看 | 国产精品自在线拍 | 1024人成网站色 | 色综合久久天天综合观看 | 精品国产精品国产 | wwwav视频 | 91麻豆精品激情在线观看最新 | 韩国激情网 | 国产精品拍拍拍福利在线观看 | 国产裸舞福利资源在线视频 | 久久re热在线视频精69 | 香蕉人人超人人超碰超国产 | 亚洲精品乱码久久久久久蜜桃欧美 | 久久成人伊人欧洲精品AV | 大又大又粗又爽女人毛片 | 欧美日韩一区二区中文字幕视频 | 久久精品国产在热亚洲完整版 | 久久99精品久久久久久园产越南 | 扒开双腿疯狂进出爽爽动态图 | 亚洲国产精品自在自线观看 | 成人影院在线观看 | 高h肉爽文农民工 | 婷婷久久综合九色综合九七 | 99人中文字幕亚洲区 | 精品视频一区二区三区免费 | 日本免费三区 | 欧美一区二区三区免费看 | 日韩精品中文字幕视频一区 | 亚洲日本在线观看网址 | 亚洲www美色 | 欧美免赞性视频 | 亚洲一区二区福利视频 | 日韩人成 | 国内自拍2020 | 日本护士xxxx视频免费 | 99久久一区二区精品 | 久久国产精品高清一区二区三区 |