2012-06-15 4 views
0

Я использую следующий код для получения растрового изображения с URL-адреса. Эта функция используется несколько раз в моем коде, а при третьем или четвертом сбоях вызова отображается следующая ошибка. Url существует, и я уверен, что между предыдущими вызовами нет разницы. СпасибоРазмер растрового изображения Android превышает размер ошибки бюджета VM

public static Bitmap getBitmapFromURL(String src) { 
       try { 
        Log.e("src",src); 
        URL url = new URL(src); 
        HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
        connection.setDoInput(true); 
        connection.connect(); 
        InputStream input = connection.getInputStream(); 
        Bitmap myBitmap = BitmapFactory.decodeStream(input); //crashes at this line 
        Log.e("Bitmap","returned"); 
        return myBitmap; 
       } catch (IOException e) { 
        e.printStackTrace(); 
        Log.e("Exception",e.getMessage()); 
        return null; 
       } 
      } 

06-15 14:15:34.365: E/AndroidRuntime(863): FATAL EXCEPTION: main 
06-15 14:15:34.365: E/AndroidRuntime(863): java.lang.OutOfMemoryError: bitmap size exceeds VM budget 
06-15 14:15:34.365: E/AndroidRuntime(863): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method) 
06-15 14:15:34.365: E/AndroidRuntime(863): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:459) 
06-15 14:15:34.365: E/AndroidRuntime(863): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:515) 
06-15 14:15:34.365: E/AndroidRuntime(863): at com.nimbosolutions.projecte1.TabBar_iOSActivity.getBitmapFromURL(TabBar_iOSActivity.java:232) 
06-15 14:15:34.365: E/AndroidRuntime(863): at com.nimbosolutions.projecte1.TabBar_iOSActivity.addTab(TabBar_iOSActivity.java:209) 
+1

Вы [Googled] (https://www.google.co.in/search?sugexp=chrome,mod=15&ix=h9&sourceid=chrome&ie=UTF-8&q=android+bitmap+size+exceed+VM+budget + ошибка), прежде чем задавать вопрос? –

+0

Да, я сделал, вот почему я прошу об этом! – Jaume

+0

Возможный дубликат [OutOfMemoryError: размер растрового изображения превышает бюджет VM: - Android] (http://stackoverflow.com/questions/2928002/outofmemoryerror-bitmap-size-exceeds-vm-budget-android) – cHao

ответ

0

Вы сказали «третий или четвертый раз» - это одно и то же растровое изображение каждый раз? Если да, почему бы не кешировать и не использовать повторно?

Если нет, вам действительно нужны все 3-4 растровые изображения в памяти одновременно? Если да, то вы очищены. Если нет, могу ли я рекомендовать вам вызывать recycle() на ваших растровых изображениях до того, как вы их отбросите (т. Е. До того, как вы сбросите ссылку)? Это, как известно, освобождает память быстрее, чем ванильный GC.

+0

не то же растровое изображение. Мне не нужно 3-4 битмапов в памяти, только один. Вы имеете в виду recycle(), а затем input = null? – Jaume

+0

Нет, поток в порядке (хотя закрытие явно не плохая идея). Объект Bitmap - это тот, который нуждается в утилизации. Это зависит от вызывающего, тот, который получает 'myBitmap'. –

+0

понимает, попробую, спасибо. – Jaume

Смежные вопросы