【问题标题】:developer.android.com/training bitmapfun projectdeveloper.android.com/training bitmapfun 项目
【发布时间】:2013-04-19 16:05:18
【问题描述】:

我在我的应用程序中使用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 永远不会启动?根据代码序列,这是应该执行的下一部分!至少有人知道我应该在哪里搜索错误吗?

【问题讨论】:

  • 我无法理解问题所在。对于每个新的 bitmaworkertask,我将其添加到列表中,当我退出活动时,我会取消该列表中的所有任务,以确保没有待处理当我重新启动它时,任务会影响活动。此外,对于每个 asyncDrawable,我将 bitmapWorkerTaskReference 更改为 null 以确保它没有任何尚未被垃圾收集的 bitmapWorkerTask 引用。我的目标是模拟活动首次开始并且一切正常时的条件。但毕竟,问题依然存在!

标签: gridview backbutton asynctask android gridview android-asynctask android-lru-cache


【解决方案1】:

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

【讨论】:

  • 如果这是一个网络停用问题,当我停用 wifi 并重新激活它时,也会出现同样的问题。但在这种情况下不会发生这种情况。我的猜测是,当问题出现时,会调用 cancelPotentialWork 并返回 false。这意味着 imageview 引用了上一节中的任务。我怎样才能清理所有以前的引用?您是否成功地重现了问题?
猜你喜欢
  • 1970-01-01
  • 2019-12-02
  • 1970-01-01
  • 2015-11-18
  • 2015-01-08
  • 2018-08-30
  • 1970-01-01
  • 2020-04-12
  • 1970-01-01
相关资源
最近更新 更多