我正在使用异步任务中的BitmapFactory.decodeStream()从Internet下载位图。在我的应用程序中,我有一个图像列表视图,我只想下载用户可以看到的位图,并取消用户滚动通过的位图的所有下载请求。下载完成后,我缓存位图,这样就不必再次下载了。要取消位图下载,我调用AsyncTask.cancel(true)
问题是,有时BitmapFactory.decodeStream()会输出一个警告,指出发生了InterruptedIoException(因为我在下载任务时取消了该任务),但它实际上不会引发异常。通常,当发生这种情况时,函数返回一个半加载的位图。不幸的是,由于返回的位图不为空,应用程序只是假设下载成功,并缓存这半下载的位图。从这一点开始,用户将一直使用半加载位图,直到清除缓存。
所以我的问题是,有没有办法检查BitmapFactory.decodeStream()是否真的成功下载了位图?

最佳答案

尽管我没有找到一种方法来判断BitmapFactory.decodeStream()是否无错误地完成,但我确实找到了一种解决方法。我只是在调用BitmapFactory.decodeStream()之前和调用BitmapFactory.decodeStream()之后检查任务是否已被取消,以确定在调用BitmapFactory.decodeStream()期间任务是否已被取消。如果有,我只是假设BitmapFactory.decodeStream()失败(可能有),并执行必要的清理代码以确保位图永远不会进入缓存。

关于android - 确定BitmapFactory.decodeStream()是否成功无错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27147237/

10-09 06:26