2010-05-30 72 views
6

当我从网站上下载大量的数据,我得到这个错误信息:安卓java.lang.OutOfMemoryError

I/global (20094): Default buffer size used in BufferedInputStream constructor. 
It would be better to be explicit if an 8k buffer is required. 
D/dalvikvm(20094): GC freed 6153 objects/3650840 bytes in 335ms 
I/dalvikvm-heap(20094): Forcing collection of SoftReferences for 3599051-byte al 
location 
D/dalvikvm(20094): GC freed 320 objects/11400 bytes in 144ms 
E/dalvikvm-heap(20094): Out of memory on a 3599051-byte allocation. 
I/dalvikvm(20094): "Thread-9" prio=5 tid=17 RUNNABLE 
I/dalvikvm(20094): | group="main" sCount=0 dsCount=0 s=0 obj=0x439b9480 
I/dalvikvm(20094): | sysTid=25762 nice=0 sched=0/0 handle=4065496 

任何人都可以帮我吗?

+0

它耗尽内存,显然......你到底需要什么帮助? – flodin 2010-05-30 11:29:37

+2

至少提供完整的堆栈跟踪和关于如何下载数据的一些上下文信息(请参阅错误消息说明BufferedInputStream) – 2010-05-30 13:11:36

回答

1

单个应用程序无权访问所有可用的设备内存。如果您正在下载大型数据集,请考虑将它写入SD卡,而不是试图将其完全保存在内存中。

+4

OutOfMemory异常通常不必与磁盘内存有关,而是堆或内存/内存。 (请参阅http://java.sun.com/j2se/1.4.2/docs/api/java/lang/OutOfMemoryError.html) – 2010-05-30 19:39:41

+0

嗨,adamp, 我对SDCard很怀疑,但它仍然是OutOfMemory。你能告诉我如何回收可绘制? – androiddream 2010-06-01 09:26:45

+0

@Toni:在尝试将整个数据集一次加载到内存中的情况下,您可以经常以块或块的形式在本地存储中处理数据,从而产生OOM。 @xiangdream:如果您的大数据是Drawables(BitmapDrawables?)形式的图像,请查看BitmapFactory解码方法和BitmapFactory.Options的inSampleSize字段。您可以将图像重新采样到较小的尺寸,同时加载它以节省内存。 http://developer.android.com/reference/android/graphics/BitmapFactory.html关于你想要做什么的更多信息会有所帮助。 :) – adamp 2010-06-01 15:37:56