【问题标题】:Android : OutOfMemoryError Error at BitmapAndroid:位图出现OutOfMemoryError错误
【发布时间】:2015-10-16 05:55:05
【问题描述】:

我收到 java.lang.OutOfMemoryError 错误,并在运行应用程序以从服务器下载多个图像并存储到 SD 卡时使应用程序崩溃。我对 gradle.properties 进行了一些更改并更改行 # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=1024m -XX:MaxHeapSize\=1024m -XX:+HeapDumpOnOutOfMemoryError -Xmx1024m -Dfile.encoding=UTF-8。并尝试调用 System.gc(); 。但一次又一次地得到同样的错误。如何解决这个问题。提前致谢。

这是我的代码

这一行的错误imagenObtenida = BitmapFactory.decodeStream(conn.getInputStream(), null, options);

Log.e("fileUrl ", " = " + fileUrl + " ImageName = " + ImageName);
            URL ImgUrl = new URL(fileUrl);
            HttpURLConnection conn = (HttpURLConnection) ImgUrl.openConnection();
            conn.connect();
            int lenghtOfImage_File = conn.getContentLength();
            Log.e("lenghtOfImage_File ", " = " + lenghtOfImage_File);


                System.gc();
                if(imagenObtenida != null)
                {
                    imagenObtenida.recycle();
                    imagenObtenida = null;
                }
                BitmapFactory.Options options = new BitmapFactory.Options();
                options.inTempStorage = new byte[16*1024];
                options.inPurgeable = true;
                options.inSampleSize = 1;

                imagenObtenida = BitmapFactory.decodeStream(conn.getInputStream(), null, options);
                newFolder = new File(Environment.getExternalStorageDirectory().getPath() + File.separator + "classnkk_images");

                File file = new File(newFolder, ImageName);

这是我的日志错误

10-16 11:16:20.978    1135-1152/? E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
    java.lang.RuntimeException: An error occured while executing doInBackground()
            at android.os.AsyncTask$3.done(AsyncTask.java:278)
            at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
            at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
            at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
            at java.util.concurrent.FutureTask.run(FutureTask.java:137)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
            at java.lang.Thread.run(Thread.java:856)
     Caused by: java.lang.OutOfMemoryError
            at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
            at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:493)
            at com.example.tazeen.classnkk.AllPosts_Page.download_PngFile(AllPosts_Page.java:1128)
            at com.example.tazeen.classnkk.AllPosts_Page.getDoenLoaddata(AllPosts_Page.java:735)
            at com.example.tazeen.classnkk.AllPosts_Page$GetgetDoenLoaddata.doInBackground(AllPosts_Page.java:705)
            at com.example.tazeen.classnkk.AllPosts_Page$GetgetDoenLoaddata.doInBackground(AllPosts_Page.java:701)
            at android.os.AsyncTask$2.call(AsyncTask.java:264)
            at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
            at java.util.concurrent.FutureTask.run(FutureTask.java:137)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
            at java.lang.Thread.run(Thread.java:856)

【问题讨论】:

  • 最好使用GlideFresco 库从服务器加载多个图像。
  • 这意味着您正在下载太多或太大的图像。请确保只下载您需要且分辨率合适的图片。
  • 我从服务器下载了太多太大的图片。
  • @androidTag 大图像会产生问题

标签: android


【解决方案1】:

java.lang.OutOfMemoryError: 请求的大小超过了 VM 限制。 此错误表明 Java 应用程序尝试分配一个数组,该数组的大小大于堆大小。

OutOfMemoryError扩展了VirtualMachineError类,表示JVM坏了,或者资源耗尽无法操作。

确认您的应用程序没有存储不必要的信息。 只存储和维护那些需要的信息 正确执行您的 Java 应用程序。

Strange out of memory issue while loading an image to a Bitmap object

【讨论】:

    【解决方案2】:

    您尝试从服务器下载的图像可能很大,因此在尝试对其进行解码时,它会导致 OOM 异常。

    在开发者网站上查看此帖子以处理位图here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 2014-08-13
      • 1970-01-01
      • 2013-05-16
      • 2014-09-07
      • 1970-01-01
      • 2012-06-02
      相关资源
      最近更新 更多