Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:OutOfMemoryError位图错误_Android - Fatal编程技术网

Android:OutOfMemoryError位图错误

Android:OutOfMemoryError位图错误,android,Android,我得到了java.lang.OutOfMemoryError的错误,并在运行应用程序从服务器下载多个图像并存储到SD卡时崩溃了应用程序。我对gradle.properties进行了一些更改,并更改了行#org.gradle.jvmargs=-Xmx2048m-XX:MaxPermSize=1024m-XX:MaxHeapSize\=1024m-XX:+heapdumponootfmemoryError-Xmx1024m-Dfile.encoding=UTF-8。并尝试调用System.gc()也

我得到了java.lang.OutOfMemoryError的错误,并在运行应用程序从服务器下载多个图像并存储到SD卡时崩溃了应用程序。我对gradle.properties进行了一些更改,并更改了行#org.gradle.jvmargs=-Xmx2048m-XX:MaxPermSize=1024m-XX:MaxHeapSize\=1024m-XX:+heapdumponootfmemoryError-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)

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

OutOfMemoryError扩展了VirtualMachineeError类,该类表示JVM已损坏,或已耗尽资源,无法运行

验证应用程序没有存储不必要的信息。 仅存储和维护项目所需的信息 正确执行Java应用程序


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


查看开发人员网站上的这篇文章,了解如何处理位图

最好使用
Glide
Fresco
库从服务器加载多个图像。这可能是重复的,这意味着您下载的图像太多或太大。请确保只下载您需要的图像,并且图像具有适当的分辨率。我从服务器下载的图像太多太大。@androidTag big images会造成问题