使用Android-UIL,如何停止下载?

Fel*_*lix 6 java android universal-image-loader

我正在使用UIL(由Nosotra)下载服务器渲染的图像,并且服务器最多需要50秒来创建每个图像.服务器的超时设置为15秒,因此我们创建了一个在ImageDownloader.getStream()方法中实现的轮询机制.下载后,图像将显示在ViewPager中(android.support.v4.view.ViewPager就像样本一样).

当用户导航到其他页面时,我希望在不下载文件的情况下停止轮询,但似乎没有" "方法来打破下载流程.

getStream伪代码

1. Parse custom-style URI ("asdf://mypng|123455678945643563245");
2. Make a real world URL from it.
3. Poll the server for the image url (causes the server to render - could take up to 1m30s).
4. Get the stream from the URL, return the stream to caller. 
       Example Code: InputStream is = (InputStream) url.getContent();
Run Code Online (Sandbox Code Playgroud)

到目前为止尝试了什么

null从我的getStream方法返回会导致NullPointerException抛出,所以它与抛出异常基本相同.

抛出异常时,图像会停止,但是:

  1. 稍后我会得到一张图片OutOfMemoryError,所以我在屏幕上显示错误.我不应该得到错误.我已经尝试过这个SO问题的清单,但没有任何效果.这是OOM Stacktrace:OutOfMemoryError stacktrace nostra uil
  2. 下载停止,如果查看器不回收视图,当返回到该页面时,我仍然会看到该错误页面(不重试).

我希望如何

我希望我能有这将增加停止当前的下载和新的任务重新添加到队列中(目前在上一集的结尾"等待"的方法QueueProcessingType.LIFO,我希望它来下载重新添加后当前页面和用户想要的任何新页面应优先于重新添加的页面.

我也会满足于避免OutOfMemoryError.

请帮忙.

TAC*_*TAC 1

问题可能出在这里 4. 下载图像,返回流。下载——这是UIL的主要功能。只需在此处返回 NetworkStream 即可。另外,我在使用大图像并启用 MemoryCache 的 UIL 上出现 OOM。还有服务器上的图像尺寸是多少。在加载图像方法中,您可以控制大小。UIL GitHub也很有帮助,请阅读第 3 和第 4 段。

  • 我曾经从 Elastic Transcoder 的 AWS 下载图像,所以行为就像你的。我从 getStream 返回 null。它仍在工作。它刚刚通过 UIL 日志发出警告。你也可以在这个方法上查找java doc https://github.com/nostra13/Android-Universal-Image-Loader/blob/master/library/src/main/java/com/nostra13/universalimageloader/core/download/ImageDownloader如果在获取图像流期间发生某些 I/O 错误,.java 会抛出 IOException 如果图像 URI 具有不支持的方案(协议),则会抛出 UnsupportedOperationException (2认同)