android volley会自动调整(子样本)大图像

时间:2015-03-16 11:17:00

标签: android android-volley

在我的应用程序中,我必须从我的服务器下载高分辨率图像。我打算用凌空抽射。图像加载适用于小图像。对于某些高分辨率图像,它会抛出内存异常。 我已经测试了一些样本图像,它会丢失某些图像的内存异常。我还看到了在这个链接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());

            }
        }
    });

3 个答案:

答案 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