2015-10-16 29 views
0

我得到錯誤java.lang.OutOfMemoryError並崩潰應用程序,同時運行應用程序從服務器下載多個圖像並存儲到SD卡。我有一些gradle的變化。屬性並更改行#org.gradle.jvmargs = -Xmx2048m -XX:MaxPermSize = 1024m -XX:MaxHeapSize \ = 1024m -XX:+ HeapDumpOnOutOfMemoryError -Xmx1024m -Dfile.encoding = UTF-8。並試圖撥打System.gc();也。但一次又一次得到同樣的錯誤。如何解決這個問題。先謝謝了。Android:OutOfMemoryError錯誤位圖

這裏是我的代碼

在該行imagenObtenida = BitmapFactory.decodeStream(conn.getInputStream(),空,期權)的錯誤;

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) 
+0

其更好地使用'Glide'或'Fresco'庫從服務器加載多個圖像。 – Piyush

+1

[將圖像加載到位圖對象時出現內存不足的問題]的可能重複(http://stackoverflow.com/questions/477572/strange-out-of-memory-issue-while-loading-an-image-位圖對象) –

+0

這意味着您正在下載太多或太大的圖像。請確保您只下載您需要的圖像,並且圖像具有適當的分辨率。 –

回答

2

java.lang.OutOfMemoryError:請求的大小超出VM限制。 此錯誤表示Java應用程序試圖分配一個數組,其大小大於堆大小。

OutOfMemoryError擴展了VirtualMachineError類,這表明JVM已損壞,或者已用盡資源並且無法運行。

確認您的應用程序不存儲不必要的信息。 僅存儲和維護 正確執行Java應用程序所需的那些信息。

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

0

,美[R試圖從服務器下載可能是大的和因此而試圖對其進行解碼,它導致OOM異常的圖像。

檢查這個職位上開發者的網站處理位圖here