Android关于ListView的优化问题
2015-01-01 21:39
351 查看
今天在我哥们的带领下,学习了一些关于ListView的优化方案。现在提出来和大家分享下....
第一点:
在Listview中数据加载时经常用到的ViewHolder,我们需要把它写成静态类static,这样的话数据是共享的在本地缓存中,取出的数据是很快的。
第二点:
如果Listview需要加载图片的话,我们一般是开子线程去加载数据的,然后再主线程中更新。这样的话为了良好的用户体验,我们经常会设置一张默认图片,如果数据还在加载,我们就先显示默认图片,然后在慢慢加载图片。
holder.img.setImageDrawable(defDrawable) 的工作流程是将一张Drawable添加进去,然后有Android绘画机制画出这张图片。要这样做的话,我们需要在listView的适配器的构造方法中先把这张图片获取到。
holder.img.setBackgroundResource(R.raw.back)的工作流程是先将raw文件夹下的图片加载到内存,然后在转化为bitmap对象,再转为drawable对象,每一张默认图片都会生成一个对象。如果我们有几千甚至几万张图片,这样的可能会内存溢出,程序就会catch掉。
第三点:看见上面的图片了吗?第二张没有加载的。那是我手指正按在Listview上,只有我松开手,它才会加载图片。并且如果我快速的滑动Listview,它只会加载我手指最后离开的那一页的数据信息,前面滑过页面的信息是不会加载的。Android系统自带的源生Listview,如果我们快速滑动的话,每次在翻页的时候,如果你细心的话,会感觉到有卡顿的效果,会很难受的。所以我向大家推荐github上一个大神写的Listview的开源框架FastScrollView,效果很强大的,有需要的朋友可以去试试的。
小技巧:我们可以先预加载一页的图片,以后的先用默认图片代替,这样的效果会很好的...
第一点:
在Listview中数据加载时经常用到的ViewHolder,我们需要把它写成静态类static,这样的话数据是共享的在本地缓存中,取出的数据是很快的。
第二点:
如果Listview需要加载图片的话,我们一般是开子线程去加载数据的,然后再主线程中更新。这样的话为了良好的用户体验,我们经常会设置一张默认图片,如果数据还在加载,我们就先显示默认图片,然后在慢慢加载图片。
holder.img.setImageDrawable(defDrawable); holder.img.setBackgroundResource(R.raw.back);上面的两种方法都是设置默认图片的,只是效率上有很大的差距。
holder.img.setImageDrawable(defDrawable) 的工作流程是将一张Drawable添加进去,然后有Android绘画机制画出这张图片。要这样做的话,我们需要在listView的适配器的构造方法中先把这张图片获取到。
Resources res = mContext.getResources(); Bitmap bitmap = BitmapFactory.decodeResource(res, R.raw.back); defDrawable = new BitmapDrawable(res, bitmap);我们先在raw文件下找到这张图片,把它加载到内存中,然后把它转化为bitmap对象,再将它转化为drawable对象,这样的话Android的原始绘画机制可以很快的画出这张图片。并且我们在加载图片的从头到尾中,只会产生一个对象,不会浪费内存。
holder.img.setBackgroundResource(R.raw.back)的工作流程是先将raw文件夹下的图片加载到内存,然后在转化为bitmap对象,再转为drawable对象,每一张默认图片都会生成一个对象。如果我们有几千甚至几万张图片,这样的可能会内存溢出,程序就会catch掉。
第三点:看见上面的图片了吗?第二张没有加载的。那是我手指正按在Listview上,只有我松开手,它才会加载图片。并且如果我快速的滑动Listview,它只会加载我手指最后离开的那一页的数据信息,前面滑过页面的信息是不会加载的。Android系统自带的源生Listview,如果我们快速滑动的话,每次在翻页的时候,如果你细心的话,会感觉到有卡顿的效果,会很难受的。所以我向大家推荐github上一个大神写的Listview的开源框架FastScrollView,效果很强大的,有需要的朋友可以去试试的。
小技巧:我们可以先预加载一页的图片,以后的先用默认图片代替,这样的效果会很好的...
//先加载第一页图片 if(!TextUtils.isEmpty(item.picUrl)){ if(position<4){ loadIMG(holder.img, item); } }
相关文章推荐
- 关于Android ListView的优化问题
- 关于android的listview的数据解析和性能优化问题
- 关于Android中listView的复用及优化问题详解,应用开发者应多多使用,是app更顺畅,让用户更好体验!
- android 关于 ScrollView嵌套GridView,ListView 显示和滑动的问题
- 关于android Listview 使用时遇到的几个问题
- android listView 重写Adapter方法getView的性能优化问题
- 关于android的listview数据列表显示的下拉和刷新报错问题
- 关于android性能优化问题
- android内存溢出问题:ListView优化
- android 关于listView的checkBox的更新问题
- 关于Android Listview的问题
- 关于Android ListView 多ItemView的问题
- android 关于 ScrollView嵌套GridView,ListView 显示和滑动的问题
- 关于android的ScrollView套listView展示不全的问题
- Android中ListView的优化问题
- android 关于 ScrollView嵌套GridView,ListView 显示和滑动的问题
- android 关于ExpandableListView的一个问题解决
- 关于android中ListView的下拉刷新的底部时间更新问题
- android 关于 ScrollView嵌套GridView,ListView 显示和滑动的问题
- android关于Listview中定义了子控件,子控件和item同时获取焦点的问题