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

本文介绍了一个文件浏览列表的开发过程,重点讨论了如何通过预加载和缓存机制解决文件图标和缩略图加载错误的问题。文章还探讨了使用ImageLoader框架进行图片加载时遇到的缓存机制缺陷及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近开发文件浏览列表一块,其中通过接口查询当前目录下的所有文件和文件夹,对于文件夹我们就显示文件夹的一些属性:图像是文件夹,然后可以进入他的下级目录;但对于文件的话我们就需要根据不同的类型,例如图片和视屏格式的图片我们需要展示他们的缩略图,
点击文件的话,也是根据不同类型,可以由不同的系统应用进行打开这个网上的方式有很多。例如:

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 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值