Android开发者网站的BitmapFun项目培训

6
我在我的应用程序中使用bitmapfun项目(),在测试过程中发现了一个问题。重现此问题的步骤如下:
  1. 打开WiFi -> 启动应用程序 -> 下载图片(正常工作)。
  2. 关闭应用程序(返回按钮),停用WiFi -> 激活数据网络 -> 重新启动应用程序(仍然正常工作)。
  3. 在下载所有图片之前,我关闭应用程序(返回按钮) -> 停用数据网络 -> 激活WiFi。 在此步骤之后,当我重新启动应用程序时,图像不会下载。
在logcat中,我看到所有的图片都在imageWorker的cancelPotentialWork()中被取消了,并且它们从未开始。我的猜测是之前的bitmapworkerTask(负责下载)发生了什么问题,并且与新任务发生了冲突。在我的应用程序中,当按下时,我清除所有缓存。但这不是问题的原因,因为我也在原始的bitmapfun中测试了相同的情况,问题也出现了!我还将项目的多线程更改为单个线程!有可能清除所有的imageview引用并取消所有正在运行的任务吗?
抱歉我的英语不好,也没有提供有关bitmapfun项目性质的更多信息,但这会使我的问题更加复杂!问我任何问题!
编辑:为了重现问题,最好在每次使用菜单选项离开活动时清除缓存。而且不能确定如果您只按照步骤1-3一次,问题是否会出现。也许您需要重复它们!
编辑2(额外帮助):当我开始活动时没有问题,第一张图片的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引用。我的目标是模拟活动首次启动并且一切正常的条件。但是,尽管做了这些,问题仍然存在! - user2065529
1个回答

2

你遇到的问题是正常的。因为ImageFetcher在OnCreate()时加载图像,但由于网络失效而取消加载。它不包含自动重启代码。因此,如果您想要自动重新启动加载,请添加代码以检测网络状态的更改。我认为这并不敏感。只需让用户通过单击某些按钮(如刷新按钮)来重新启动它。


如果这是一个网络停用的问题,那么当我停用WiFi并重新启用时,同样的问题应该出现。但在这种情况下并没有发生。我的猜测是,在出现问题时调用了cancelPotentialWork,并且它返回false。这意味着imageview引用了先前部分的一个任务。我该如何清除所有先前的引用?你成功重现了这个问题吗? - user2065529

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接