Android BitmapFactory.decodeResource out of memory if used more than once
我正在重新编写一个 Android 应用程序,其中每个活动(有几个)显示一个背景图像。用户可能会更改此图像,因此我已完成以下操作:
这是我用来设置图像的部分代码,基于 http://developer.android.com/training/displaying-bitmaps/load-bitmap.html:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Bitmap bitmap = decodeBitmap(R.drawable.background_image, screen_width, screen_height); } public BitmapDrawable backgroundImage = new BitmapDrawable(bitmap); public Bitmap decodeBitmap(int resId, int reqWidth, int reqHeight) // Calculate inSampleSize // Decode bitmap with inSampleSize set |
然后,在活动中,我将背景设置为 backgroundImage。
应用程序第一次启动时这是可行的,但如果更改了共享首选项,则应用程序会尝试再次解码资源,并且应用程序会在上面标记的点崩溃。请问我可以做些什么来避免这种情况?
每次使用完位图后,都应该释放它们,因为它们会占用大量内存。
在 onDestroy() 中你应该这样写:
1
2 |
bitmap.recycle();
bitmap = null; |
您也应该在停止使用位图时调用这些行。
我会接受原始答案,因为确实需要将位图设置为 null 是正确的。问题是我把它设置在错误的地方。
读取位图时,应用程序中出现错误,但这是因为活动中的位图。所以,我必须在每个活动中都这样做来修复它:
1
2 |
layout.setBackgroundDrawable(null);
layout.setBackgroundDrawable(myApplication.getBackground()); |
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/268996.html