我正在测试升级以使用Android Universal Image Loader 1.9.0。我在Android 4.2上测试了这个。我遇到了一个问题,我在意图服务中下载和缓存图像,以便在后台线程上运行,以免干扰用户。但是,UIL抱怨我没有在主线程上加载这些图像。我不想在主线程上加载这些图像,我只是希望能够在后台将它们缓存在光盘上,以便在用户实际查看指定图像时不需要下载它们。除了ImageLoader.loadImage之外,还有另一种方法可以在后台线程上预先缓存图像吗?如果没有,我如何允许在不是主线程的线程上预先缓存光盘?所有这些代码都在IntentService中运行。
ImageLoaderConfiguration:
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
getApplicationContext())
.threadPriority(Thread.MAX_PRIORITY)
.memoryCacheSize(memoryCacheSize)
.denyCacheImageMultipleSizesInMemory()
.threadPoolSize(5)
.discCacheFileNameGenerator(new MyFileNameGenerator())
.tasksProcessingOrder(QueueProcessingType.LIFO)
.build();
DisplayImageOptions:
DisplayImageOptions options = new DisplayImageOptions.Builder().cacheOnDisc()
.imageScaleType(ImageScaleType.NONE).build();
加载图片代码:
imageLoader.loadImage(imageURI, options,
new SimpleImageLoadingListener() {
@Override
public void onLoadingComplete(String imageUri, View view,
Bitmap loadedImage)
{
loadNext(); // gives a notification update and loads next image URI in queue
}
@Override
public void onLoadingFailed(String imageUri, View view,
FailReason failReason)
{
loadNext(); // gives a notification update and loads next image URI in queue
}
});
答案 0 :(得分:2)
实际上UIL没有提供预加载图像的方法,即只是添加到光盘缓存。它总是返回解码的Bitmap。
但在您的情况下,您可以使用loadImageSync(...)
。我认为这对你更合适。
答案 1 :(得分:0)
在深入了解UIL的代码后,我想出了一个解决方案。不确定它是最好的,但将来可以帮助某人。如果在DisplayImageOptions中设置自己的处理程序,它会跳过检查以确保处理程序在主线程上:
DisplayImageOptions options = new DisplayImageOptions.Builder().cacheOnDisc()
.imageScaleType(ImageScaleType.NONE)
.handler(new Handler()) // added this line
.build();