您的位置:首页 > 其它

解决由于异步加载和getview的混用导致图片错位

2016-08-02 00:58 190 查看
最近开发文件浏览列表一块,其中通过接口查询当前目录下的所有文件和文件夹,对于文件夹我们就显示文件夹的一些属性:图像是文件夹,然后可以进入他的下级目录;但对于文件的话我们就需要根据不同的类型,例如图片和视屏格式的图片我们需要展示他们的缩略图,

点击文件的话,也是根据不同类型,可以由不同的系统应用进行打开这个网上的方式有很多。例如:

private void openFile(File file){

Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//设置intent的Action属性
intent.setAction(Intent.ACTION_VIEW);
//获取文件file的MIME类型
String type = getMIMEType(file);
//设置intent的data和Type属性。
intent.setDataAndType(/*uri*/Uri.fromFile(file), type);
//跳转
startActivity(intent); //可以加个异常捕捉


在这里本人图片和影视的缩略图都是通过在adapter 中通过开源框架的ImagerLoader来实现的。但是在测试过程中,一直随机出现比如文件夹的图片显示的是图片的缩略图,这个明显是由于getview的缓存机制导致了,重用出现了错误,但是归根结底还是由于异步加载的框架导致图片加载不是实时的,可能加载图片的时候这个item所对应的缓存已经有所变动,所以才出现了这种bug。

既然知道了原因我们就需要解决这个问题,怎么来呢。看来异步加载是不能直接用了。那我们就可以换一种思路,预先缓存好对应url的bitMap 然后通过map的形式加入到list 集合中,并且可以保存起来。每次我们拿到url先做缓存,如果这个url在集合中能够查到,那我们就直接吧对应bitmap拿出来直接加载到对应的控件上。这种加载方式就相当于我们平时直接加载资源文件一样,肯定不会出现错位等问题了。

通过URl 获取bitmap 的方式我们其实在ImageLoader 框架中可以找到。有一个ImageLoader.sysImageBitmap(url,options)返回的就是一个bitMap 。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  图片 异步 应用