您的位置:首页 > 其它

ListView的四层优化

2016-01-19 10:47 162 查看
ListView 优化

0层优化:不优化

1层优化:最多加载 n+1 个 convertView

复用 convertView 每次不用去加载一个新的 view 复用 convertView 来解决每次都加载一个新的 view

这样就不用每次都加载一个新的view到内存中,减少了对内存的使用

2层优化:优化 convertView 里面的子 view

优化其他的显示视图,如 TextView

一层优化只优化了 convertView 没有优化 convertView 里面的子 view,即使一层优化,优化了convertView

但是里面的子 view 还是每次都去加载,这样对内存也是相当好资源的

所有二层优化就是优化 convertView 里面的子 view

也是使用 setTag 的方式来进行优化

3层优化:

对图片的优化,即加载图片,使用图片的三级缓存

图片的三级缓存

1).一级缓存(内存缓存),图片在内存中,直接加载,如果内存缓存中没有,则向二级缓存中加载图片

2).二级缓存(本地缓存),图片保存在本地SD卡中,如果一级缓存中没有才在二级缓存中加载图片,如二级缓存中也没有

则向三级缓存中加载,如果有,加载的同时把图片保存到一级缓存中

3).三级缓存(服务器缓存),图片保存在服务器端,如果在一级缓存和二级缓存中都没有找到图片,就到服务器端的三级缓存中

加载,加载过来显示出来的同时,保存到一级缓存和二级缓存中

使用图片的三级缓存存在的问题(图片的闪屏)

当快速滑动的时候,会出现图片的缓存,因为 convertView 的复用,和线程的多次启动,但是还没来得及显示图片就被复用,

但是又是一个新的线程,同一个视图,多个线程,多张图片,所以就会出现闪屏的问题

解决办法:

使用 view 的setTag方法,把要显示的图片,保存到里面

在启动分线程联网请求和显示图片的时候通过getTag取出来

再启动分线程联网请求图片是,要请求的图片是不是要显示的,如果不是,则结束

在显示图片之前判断是不是要显示的那张图片,有可能已经被更改了,如果不是结束,

4层优化:

当数据量非常大的时候,就需要使用四次优化,分页或者其他技术

数据全部是从服务器端获取,不可能一次获取全部的数据,都是每次只获取部分数据显示

而不是全部加载到客户端进行显示,可能使用到的技术:分页,下拉刷新等
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: