2014-05-22 4 views
0

Когда я пытаюсь установить обои из ресурса Drawable, я получил OutOfMemoryError. Как я могу исправить эту проблему?Android OutOfMemoryError при попытке создать обои из ресурса Drawable

Context context = v.getContext(); 
WallpaperManager wallpaperManager = WallpaperManager.getInstance(context); 
try { 
    Drawable drawable = context.getResources().getDrawable(wpResID); 
    Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap(); 
    wallpaperManager.setBitmap(bitmap); 

    bitmap.recycle(); 
    bitmap = null; 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

Я получил это:

05-22 16:03:13.001: E/AndroidRuntime(30942): FATAL EXCEPTION: main 
05-22 16:03:13.001: E/AndroidRuntime(30942): java.lang.OutOfMemoryError 
05-22 16:03:13.001: E/AndroidRuntime(30942): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) 
05-22 16:03:13.001: E/AndroidRuntime(30942): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:521) 
05-22 16:03:13.001: E/AndroidRuntime(30942): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:374) 
05-22 16:03:13.001: E/AndroidRuntime(30942): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:785) 
05-22 16:03:13.001: E/AndroidRuntime(30942): at android.content.res.Resources.loadDrawable(Resources.java:2005) 
05-22 16:03:13.001: E/AndroidRuntime(30942): at android.content.res.Resources.getDrawable(Resources.java:673) 
+0

Изображение куча неожиданно улучшает размер растрового изображения –

ответ

0

Использование BitmapFactory.Options.inSampleSize при первой загрузки изображения, чтобы получить размер, как можно ближе к вашей целевой размер, а затем использовать Bitmap.createScaledBitmap для масштаб до нужного размера.

В этом answer есть код.

+0

Как я вижу, я получаю эту ошибку в этой строке «Drawable drawable = context.getResources(). GetDrawable (wpResID)», и я храню нужные размеры изображений, поэтому не требуется изменять размер. –

+0

Попробуйте андроид: largeHeap = "true", чтобы увеличить размер кучи для вашего приложения в вашем манифесте – Erzer

+0

И вы можете попытаться найти утечку памяти. Как это здесь - http://android-developers.blogspot.ru/2009/02/track-memory-allocations.html – Erzer

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