2014-02-14 45 views
0

我試圖運行android.its給錯誤跟蹤執行的AsyncTask時,其給內存不足的錯誤了

02-14 22:49:14.812: E/AndroidRuntime(665): FATAL EXCEPTION: AsyncTask #3 
02-14 22:49:14.812: E/AndroidRuntime(665): java.lang.RuntimeException: An error occured while executing doInBackground() 
02-14 22:49:14.812: E/AndroidRuntime(665): at android.os.AsyncTask$3.done(AsyncTask.java:278) 
02-14 22:49:14.812: E/AndroidRuntime(665): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
02-14 22:49:14.812: E/AndroidRuntime(665): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
02-14 22:49:14.812: E/AndroidRuntime(665): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
02-14 22:49:14.812: E/AndroidRuntime(665): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
02-14 22:49:14.812: E/AndroidRuntime(665): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
02-14 22:49:14.812: E/AndroidRuntime(665): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
02-14 22:49:14.812: E/AndroidRuntime(665): at java.lang.Thread.run(Thread.java:856) 
02-14 22:49:14.812: E/AndroidRuntime(665): Caused by: java.lang.OutOfMemoryError 
02-14 22:49:14.812: E/AndroidRuntime(665): at java.io.BufferedWriter.<init>(BufferedWriter.java:71) 
02-14 22:49:14.812: E/AndroidRuntime(665): at java.io.BufferedWriter.<init>(BufferedWriter.java:54) 
02-14 22:49:14.812: E/AndroidRuntime(665): at com.jakewharton.disklrucache.DiskLruCache.open(DiskLruCache.java:226) 
02-14 22:49:14.812: E/AndroidRuntime(665): at com.hercules.quantum.QuantumActivity$InitThumbnailDiskCacheTask.doInBackground(QuantumActivity.java:5575) 
02-14 22:49:14.812: E/AndroidRuntime(665): at com.hercules.quantum.QuantumActivity$InitThumbnailDiskCacheTask.doInBackground(QuantumActivity.java:1) 
02-14 22:49:14.812: E/AndroidRuntime(665): at android.os.AsyncTask$2.call(AsyncTask.java:264) 
02-14 22:49:14.812: E/AndroidRuntime(665): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
02-14 22:49:14.812: E/AndroidRuntime(665): ... 4 more 

的現有項目和相關的源代碼到它顯示這個錯誤是

class InitThumbnailDiskCacheTask extends AsyncTask<Void, Void, Void> { 
     @Override 
     protected Void doInBackground(Void... params) { 
      synchronized (thumbnailLruCacheLock) { 
       // Check if media is mounted or storage is built-in, if so, try and use external cache dir 
       // otherwise use internal cache dir 
       final String cachePath = 
         Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) || 
           !Environment.isExternalStorageRemovable() ? getExternalCacheDir().getPath() : 
             getCacheDir().getPath(); 
           Log.i("Cache Path","Cache Path"+cachePath); 

       try { 
        if (!isCancelled()) { 
         thumbnailLruCache = DiskLruCache.open(
           new File(cachePath + File.separator + "thumbnails"), 
           APP_VERSION, 
           VALUE_COUNT, 
           DISK_CACHE_SIZE); 
        } 
       } catch (IOException e) { 
        Log.e(TAG, "Failed to initialize thumbnail cahce", e); 
       } 
       thumbnailLruCacheStarting = false; // Finished initialization 
       thumbnailLruCacheLock.notifyAll(); // Wake any waiting threads 
      } 
      return null; 
     } 
    } 

任何人都可以請指導線如何解決它。

+0

這是你的DiskLruCache.java文件的第226行嗎? – nKn

+0

https://github.com/JakeWharton/DiskLruCache/blob/master/src/main/java/com/jakewharton/disklrucache/DiskLruCache.java這是圖書館 –

+0

Log.i中的主要問題(「Cache Path」,「緩存路徑「+ cachePath); LogCat中不顯示此日誌 –

回答

0

您正在分配太多內存。在Android中,進程的內存有限(請參閱this question),並且進程內存的總數不能超過此數量,否則您將獲得OutOfMemoryError。考慮分幾步拆分你的加載,以便GC可以釋放未使用的內存。