developer.android.com/training bitmapfun项目

use*_*529 6 android gridview android-asynctask android-lru-cache

我在我的应用程序中使用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...
Run Code Online (Sandbox Code Playgroud)

当我开始有问题的活动时,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
Run Code Online (Sandbox Code Playgroud)

为什么在第二种情况下调用cancelPotentialWork时doInBackground永远不会启动?根据代码序列,这是应该执行的下一个部分!至少有任何人想知道我应该在哪里搜索错误吗?

jer*_*rry 2

你发生什么事都没关系。因为ImageFetcher在OnCreate()时加载图像,但通过网络deactivate取消。它不包含自动重启代码。因此,如果您希望加载自动重启,请添加代码来检测网络状态的变化。我觉得不敏感。只需让用户通过单击刷新按钮等重新启动它即可。