android 之listview 優(yōu)化方法
這個東西做android是必備的,我相信你一定也會,但是我寫下來的目的就是記錄一下。
這個東西面試也很多會問到的,那么我們怎么回答那?
首先我認為有這么幾點:
1、listview在定義的時候寬和高最好固定一下,這樣可以減少listview測量次數(shù),避免每次加載的時候都要去進行測量。
2、分頁加載,這也是優(yōu)化之一,優(yōu)化內存,還有體驗感,有興趣的可以試試大數(shù)據加載;
3、convertView 就是布局的復用;
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;
}
也就是說如果這樣寫的話每次都會進行布局的填充(滑動一下你就會發(fā)現(xiàn)每次都會打印日志),找到相應的布局,如果每次都去填充的話肯定浪費資源,所以我們這樣去寫
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ù)據(如果你頁面顯示5個那個這里的數(shù)據就應該是六條會比顯示的數(shù)據多一條)。
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ù)據就會混亂,并且重復數(shù)據很多。這樣顯然是不符合我們的要求的;
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;
}
這樣的基本復合我們的要求了,數(shù)據不會混亂并且復用了布局還減少了findViewById的次數(shù),這樣大大減少了內存的使用。其實這樣做有個問題listview item中如果有圖片快速滑動你會發(fā)現(xiàn)錯位的問題,當然這些問題第三方的加載框架一般都可以解決。listview item盡量減少布局的嵌套 還有大圖片的加載 容易oom。listview 優(yōu)化差不多就這些,如果還有其他的更好的優(yōu)化方法,歡迎留言。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Android activity實現(xiàn)延時跳轉功能
Activity是一個Android的應用組件,它提供屏幕進行交互。今天通過本文給大家介紹Android activity實現(xiàn)延時跳轉功能,感興趣的朋友一起看看吧2021-06-06
Android開發(fā)之基于DialogFragment創(chuàng)建對話框的方法示例
這篇文章主要介紹了Android開發(fā)之基于DialogFragment創(chuàng)建對話框的方法,結合實例形式分析了DialogFragment創(chuàng)建對話框的具體功能與布局相關實現(xiàn)技巧,需要的朋友可以參考下2017-08-08
Android為Tiny4412設備驅動在proc目錄下添加一個可讀版本信息的文件
今天小編就為大家分享一篇關于Android為Tiny4412設備驅動在proc目錄下添加一個可讀版本信息的文件,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12

