在我的应用程序中,我必须从我的服务器下载高分辨率图像。我打算用凌空抽射。图像加载适用于小图像。对于某些高分辨率图像,它会抛出内存异常。 我已经测试了一些样本图像,它会丢失某些图像的内存异常。我还看到了在这个链接loading large images efficiently中有效地显示大型图像的子样本。我不知道它会自动降低高分辨率图像的图像分辨率。
使用volley将图像加载到imageview中的代码。
imgloader_disk.get(url, new ImageListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
@Override
public void onResponse(ImageContainer response, boolean arg1) {
if (response.getBitmap() != null) {
mImageView.setImageBitmap(response.getBitmap());
}
}
});
答案 0 :(得分:1)
您的服务器必须没有大尺寸的图像,无论您使用什么库,无论如何都会有Out of memory exception
,因为任何Android应用程序的默认堆大小都是有限的,即16MB。一旦你消耗了这个堆大小,无论你是否增加它,你肯定会有一个内存不足的例外。因此建议不要在服务器上使用高分辨率图像。
答案 1 :(得分:1)
我假设您正在使用ImageLoader
对象来启动获取所需图片的请求。
ImageLoader.get()
有一个重载方法,它接受你应该总是使用的maxWidth / maxHeight参数(除非你知道你正在提取的图像的大小合理) :
public ImageContainer get(String requestUrl, ImageListener imageListener, int maxWidth, int maxHeight, boolean withCache)
您可以使用ImageView
图片的大小显示,或者 - 如果您不知道尺寸 - 您应该使用屏幕的宽度/高度。
一旦你传递了这些变量,Volley将通过将图像缩小到不大于所需的大小来处理剩下的事情。
请记住,与iOS不同,Android对您在应用中分配的内存非常严格,这在Bitmaps中尤为普遍。您必须尽一切努力仅分配所需内容,并在不再需要时释放资源。
答案 2 :(得分:0)
添加
android:largeHeap="true"
在您的AndroidManifest.xml
中