国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

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

2019-12-12 00:47:46
字體:
供稿:網(wǎng)友

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

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

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

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

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

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

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

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

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

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

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

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

ViewHolder

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

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

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 南部县| 中山市| 开封县| 当涂县| 永兴县| 苗栗县| 名山县| 白山市| 巩义市| 四会市| 日土县| 六枝特区| 乌什县| 台安县| 宁海县| 无为县| 夏河县| 宜州市| 上林县| 佛坪县| 峡江县| 敦煌市| 平顶山市| 天长市| 华坪县| 平顺县| 柘城县| 柯坪县| 伊宁市| 延寿县| 衢州市| 治县。| 古浪县| 神池县| 蛟河市| 江口县| 高淳县| 塔城市| 乌苏市| 普兰店市| 瑞昌市|