【发布时间】:2013-04-19 16:05:18
【问题描述】:
我在我的应用程序中使用bitmapfun 项目(gridview),在测试时我发现了一个问题。重现此问题的步骤如下:
- 打开 wifi -> 启动应用程序 -> 下载图片(可以正常使用)。
- 关闭应用程序(返回按钮),停用 wifi -> 激活数据网络 -> 重新启动应用程序(仍然可以正常工作)。
- 在下载所有图像之前,我关闭应用程序(返回按钮) -> 停用数据网络 -> 激活 wifi。在这一步之后,当我重新启动应用程序时,图像不会下载。
在 logcat 中,我看到所有图像都在 imageWorker 的 cancelPotentialWork() 中被取消,并且它们永远不会启动。我的猜测是之前的 bitmapworkerTask(负责下载) 发生了一些事情,并且与新任务发生了冲突。在我的应用程序中,当按下backbutton 时,我会清除所有缓存。但这不是问题的原因,因为我也在原始 bitmapfun 中测试了相同的场景并且问题也出现了!我该如何解决这个问题?我也把项目的多线程asynctask改成了单线程!有什么办法可以清除所有imageview引用,取消所有正在运行的任务?
很抱歉我的英语没有提供有关 bitmapfun 项目性质的更多信息,但这会大大扩展我的问题!问我任何问题!
编辑:为了重现问题,每次使用菜单选项离开活动时,最好清除缓存。此外,如果您按照步骤 1-3 执行一次,也不确定是否会出现问题。也许你必须重复它们!
Edit2(附加帮助):当我毫无问题地开始活动时,第一张图像的 logcat 如下:
04-24 02:31:56.400: D/ImageWorker(25625): doInBackground - starting work
04-24 02:31:56.400: D/ImageFetcher(25625): processBitmap - https://lh3.googleusercontent.com/--L0Km39l5J8/URquXHGcdNI/AAAAAAAAAbs/3ZrSJNrSomQ/s160-c/Antelope%252520Butte.jpg
04-24 02:31:56.400: D/ImageFetcher(25625): processBitmap, not found in http cache, downloading...
当我开始有问题的活动时,logcat 是这样的:
04-24 02:28:07.970: D/ImageWorker(24014): cancelPotentialWork - cancelled work for https://lh3.googleusercontent.com/--L0Km39l5J8/URquXHGcdNI/AAAAAAAAAbs/3ZrSJNrSomQ/s160-c/Antelope%252520Butte.jpg
为什么在第二种情况下,当 cancelPotentialWork 被调用时,doInBackground 永远不会启动?根据代码序列,这是应该执行的下一部分!至少有人知道我应该在哪里搜索错误吗?
【问题讨论】:
-
我无法理解问题所在。对于每个新的 bitmaworkertask,我将其添加到列表中,当我退出活动时,我会取消该列表中的所有任务,以确保没有待处理当我重新启动它时,任务会影响活动。此外,对于每个 asyncDrawable,我将 bitmapWorkerTaskReference 更改为 null 以确保它没有任何尚未被垃圾收集的 bitmapWorkerTask 引用。我的目标是模拟活动首次开始并且一切正常时的条件。但毕竟,问题依然存在!
标签: gridview backbutton asynctask android gridview android-asynctask android-lru-cache