2014-02-14 48 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可以释放未使用的内存。