我正在使用 UIL (按Nosotra)下载服务器呈现的图片,并且服务器最多需要50秒才能创建每张图片。服务器的超时设置为15秒,因此我们创建了一个在ImageDownloader.getStream()
方法中实现的轮询机制。下载后,图片会以ViewPager android.support.v4.view.ViewPager
显示,就像sample一样。)
当用户导航到其他页面时,我希望在不下载文件的情况下停止轮询,但似乎没有“ nice ”方式来打破下载流程。
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();
到目前为止尝试了什么
从null
方法返回getStream
会导致NullPointerException
被抛出,因此它与抛出异常基本相同。
当抛出异常时,图像会停止,但是:
OutOfMemoryError
,因此我在屏幕上显示错误。我不应该得到错误。我已经尝试了this SO question's checklist,但没有任何效果。
这是OOM Stacktrace:我希望
我希望我有一个“等待”方法,可以添加停止当前下载并将新任务重新添加到队列末尾(当前正在QueueProcessingType.LIFO
上设置,我希望它在当前页面之后下载之后重新添加的,并且用户想要的任何新页面应该优先于重新添加的页面。“
我也愿意避免OutOfMemoryError
。
请帮忙。
答案 0 :(得分:1)
问题可能在这里4.下载图像,返回流。下载 - 这是UIL的主要特色。只需在这里返回NetworkStream即可。我还在UIL上使用大图像和启用了MemoryCache。您在服务器上也有哪个图像大小。在加载Image方法中,您可以控制Size。 同样有帮助UIL GitHub请阅读第3和第4段。