Android大图像下载问题:内存不足

时间:2016-07-01 11:39:55

标签: android image download out-of-memory

我正在尝试下载图片文件。在某些情况下,图像太大,在中途会产生OutOfMemoryError。如何应对这种情况?

private class DownloadImage extends AsyncTask<String, Void, Bitmap> {

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                mProgressDialog = new ProgressDialog(MainActivity.this);
                mProgressDialog.setTitle("Download Image");
                mProgressDialog.setMessage("Loading...");
                mProgressDialog.setIndeterminate(false);
                mProgressDialog.show();
            }

            @Override
            protected Bitmap doInBackground(String... URL) {

                String imageURL = URL[0];

                Bitmap bitmap = null;
                try {
                    // Download Image from URL
                    InputStream input = new java.net.URL(imageURL).openStream();
                    // Decode Bitmap
                    bitmap = BitmapFactory.decodeStream(input);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return bitmap;
            }

            @Override
            protected void onPostExecute(Bitmap result) {
                // Set the bitmap into ImageView
                image.setImageBitmap(result);
                // Close progressdialog
                mProgressDialog.dismiss();
            }
        }

3 个答案:

答案 0 :(得分:3)

首先,您需要确定在哪个屏幕或屏幕部分中显示它。您需要定义容器的结果大小(宽度和高度),它将在应用程序中显示您的图像。然后,当您收到图像时,需要将其缩小到目标尺寸,然后再显示它。

以下是完整的教程如何执行!link!

但我建议您使用“加载图片”中的一个&#39;库。 Picasso 就是一个很好的例子。请查看here

答案 1 :(得分:0)

如果您不想使用Picasso等库,可以使用Volley

去搜索NetworkImageView,也许会解雇你。有一个教程:using-volley-to-download-cache-and-display-bitmaps.

你也可以看看这个问题:how-do-i-properly-set-up-volley-to-download-images-from-a-url

这里也是:Volley Request

答案 2 :(得分:0)

  

在清单文件的应用程序标记中添加“android:largeHeap = true”