簡體   English   中英

位圖圖像導致OutOfMemoryError

[英]Bitmap image causing OutOfMemoryError

當我從android中的url獲取圖像時,我得到了OutOfMemoryError。下面我提到了我的代碼和異常。

ByteArrayOutputStream bais = new ByteArrayOutputStream();
 InputStream is = null; 
URL url = null; 
try { 
url = new URL(image); 
is = url.openStream (); 
byte[] byteChunk = new byte[4096]; // Or whatever size you want to read in at a time. 
int n; 
while ( (n = is.read(byteChunk)) > 0 )
 {
 bais.write(byteChunk, 0, n);
 } 
is.close(); 
bais.flush(); 
} catch (Exception e) { 
System.err.printf ("Failed while reading bytes from %s: %s", url.toExternalForm(), e.getMessage());
 e.printStackTrace ();
 bais = null; // Perform any other exception handling that's appropriate.
 }

異常日志:專門針對上述代碼

    03-22 13:04:44.858: E/dalvikvm-heap(1528): Out of memory on a 13131140-byte allocation. 03-22 13:04:44.858: I/dalvikvm(1528):
> "Thread-180" prio=5 tid=25 RUNNABLE 03-22 13:04:44.858:
> I/dalvikvm(1528):|group="main" sCount=0 dsCount=0
> obj=0x415deed8self=0x378150 03-22 13:04:44.858: I/dalvikvm(1528): |
> sysTid=1572 nice=0 sched=0/0 cgrp=[fopen-error:2]handle=1723384 03-22
> 13:04:44.858: I/dalvikvm(1528): | schedstat=( 765401358 258475984 4706
> ) utm=41 stm=35 core=0 03-22 13:04:44.858: I/dalvikvm(1528): at
> java.io.ByteArrayOutputStream.expand(ByteArrayOutputStream.java:~91)
> 03-22 13:04:44.858: I/dalvikvm(1528): at
> java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:201)
> 03-22 13:04:44.858: I/dalvikvm(1528): at
> com.lukup.util.FetchImage.run(FetchImage.java:46) 03-22 13:04:44.858:
> W/dalvikvm(1528): threadid=25: thread exiting with uncaught
> exception(group=0x409df1f8) 03-22 13:04:44.868:
> E/AndroidRuntime(1528): FATAL EXCEPTION: Thread-180 03-22
> 13:04:44.868: E/AndroidRuntime(1528): java.lang.OutOfMemoryError 03-22
> 13:04:44.868: E/AndroidRuntime(1528): at
> java.io.ByteArrayOutputStream.expand(ByteArrayOutputStream.java:91)
> 03-22 13:04:44.868: E/AndroidRuntime(1528): at `enter code
> here`java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:201)
> 03-22 13:04:44.868: E/AndroidRuntime(1528): at
> com.lukup.util.FetchImage.run(FetchImage.java:46)
>   --

以上是異常日志

您正在嘗試分配13 MB的空間。 某些手機​​不允許應用程序使用那么多的內存,而忘了一次分配-甚至許多新手機都無法通過。 嘗試更頻繁地刷新輸出流,這可能是因為它是愚蠢的,並為整個輸出保留了內存,直到刷新為止。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM