6

我在我的应用程序中使用了 bitmapfun项目(),在测试这个时我发现了一个问题。重现此问题的步骤如下:

  1. 打开 wifi -> 启动应用程序 -> 下载图像(它工作正常)。
  2. 关闭应用程序(后退按钮),停用 wifi -> 激活数据网络 -> 重新启动应用程序(仍然可以正常工作)。
  3. 在下载所有图像之前,我关闭应用程序(后退按钮)-> 停用数据网络 -> 激活 wifi。在这一步之后,当我重新启动应用程序时,图像不会下载。

在 logcat 中,我看到所有图像都在 imageWorker 的 cancelPotentialWork() 中被取消,并且它们永远不会启动。我的猜测是之前的 bitmapworkerTask(负责下载)发生了一些事情,并且与新任务发生了冲突。在我的应用程序中,当按下时,我会清除所有缓存。但这不是问题的原因,因为我也在原始 bitmapfun 中测试了相同的场景,问题也出现了!我该如何解决这个问题?我还把项目的多线程改成了单线程!有没有办法清除所有 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 永远不会启动?根据代码序列,这是应该执行的下一部分!至少有人知道我应该在哪里搜索错误吗?

4

1 回答 1

2

发生在你身上的事没关系。因为ImageFetcher在OnCreate()时加载图片,但被网络取消激活。它不包含自动重启代码。所以如果你想要加载自动重启,添加代码来检测网络的状态变化。我不认为它敏感。只需让用户通过单击刷新按钮等来重新启动它。

于 2013-04-22T13:50:22.963 回答