ListView的优化

来源:互联网 发布:三凌plc编程软件下载 编辑:程序博客网 时间:2024/05/29 14:19

简介:

在android开发中Listview是一个很重要的组件,
它以列表的形式根据数据的长自适应展示具体内容,
用户可以自由的定义listview每一列的布局,但当listview有大量的数据需要加载的时候,
会占据大量内存,影响性能,这时候就需要按需填充并重新使用view来减少对象的创建。
而在Android5.0时,RecyclerView将逐渐取代listView,
但目前来说listView还是有很多人所常用的一个控件.

listView 如何使用?

首先要给ListView设置一个适配器setAdapter,把要显示的数据交给适配器Adapter去处理,

Adapter常用的实现类有四种 :

1.ArrayAdapter ,比较简单,易用,通常用于将数组或者集合的值包装成多个列表
2.impleAdapter ,功能相对强大,可将集合的对象包装成多个列表
3.SimpleCursorAdapter , 用于包装Cursor提供的数据
4.BaseAdapter ,用于被扩展,可对每个列表进行定制

在创建适配器的时候通常都直接继承BaseAdapter ,,并且实现里四个方法,

getCount () : 返回值控制Adapter包含多少个列表项,getItem (int position): 返回值决定某个position位置的列表项的内容getItemId (int position) : 返回值决定某个position位置的列表项的idgetView (int position ,  View ConvertView  , ViewGroup parent) :返回值决定某个position位置的列表项的组件,

上面的四个方法中主要的方法是 getCount 和 getView

ListView加载数据都是在
public View getView(int position, View convertView,ViewGroup parent) {}方法中进行的,
优化listview的加载速度就要让convertView匹配列表类型,
并最大程度上的重新使用convertView。

ListView的优化方式:

1.ViewHolder 复用convertview

 是提高ListView效率的一个很重要的方法, 充分利用了ListView的缓存机制, 避免每次都调用getView方法去实例化控件,  而使用ViewHolder 只需要在定义Adapter的时候 定义一个内部ViewHolder类, 将布局中的控件作为ViewHolder的成员变量, 在getView方法中通过缓存机制复用缓存即可

2.异步加载图片基本思想

 步骤 : (内存缓冲)--(SD卡缓冲)-- (网络下载图片)  并保存到SD卡同时加入内存 具体优化: 优化一:先从内存中加载,没有则开启线程从SD卡或网络中获取, 这里注意从SD卡获取图片是放在子线程里执行的,否则快速滑屏的话会不够流畅。 优化二:在adapter里新建一个变量,表示listview是否处于滑动状态, 如果是滑动状态则仅从内存中获取图片,没有的话无需再开启线程去外存或网络获取图片。 优化三:利用线程池在从网络获取图片时,先是将其保存到sd卡,然后再加载到内存, 这么做的好处是在加载到内存时可以做个压缩处理,以减少图片所占内存

3.分页加载数据, onscollLinster();
4.使用静态的view对象 避免创建过多的view.
5.滚动时停止加载
6.把下载后的数据缓存到数据库里

0 0
原创粉丝点击