Android 多个位图可能出现内存不足错误
我有一个用户评论说,在我的应用程序中查看了一堆图像后,它崩溃了(他认为这是由于内存不足错误)。我有以下相关代码:Android 多个位图可能出现内存不足错误,android,memory,bitmap,Android,Memory,Bitmap,我有一个用户评论说,在我的应用程序中查看了一堆图像后,它崩溃了(他认为这是由于内存不足错误)。我有以下相关代码: int themeID = mNav[mPos]; String icon = getThemeData(DbAdapter.KEY_ICON, themeID); ImageView viewer = (ImageView)findViewById(R.id.viewer); Bitmap bMap = null; try {
int themeID = mNav[mPos];
String icon = getThemeData(DbAdapter.KEY_ICON, themeID);
ImageView viewer = (ImageView)findViewById(R.id.viewer);
Bitmap bMap = null;
try {
bMap = getJPG(icon + ".jpg");
} catch (IOException e) {
e.printStackTrace();
}
viewer.setImageBitmap(bMap);
当用户在图像之间切换时,会重新运行。根据我的了解,您应该在位图上调用recycle()。设置图像后是否需要在bMap上调用它?或者在设置下一个之前,是否有办法将其从viwer中拉出
根据recycle文档(如果我在bMap上调用它),似乎我不需要使用它:这是一个高级调用,通常不需要调用,因为正常的GC进程将在不再引用此位图时释放此内存 如果需要显式调用
recycle()
,则可能意味着您存在内存泄漏。打电话给它几乎从来都不是一个解决办法
您是否尝试检查您的应用程序是否存在潜在的mmory泄漏
例如,要检查它,您可以旋转设备几次,并检查垃圾收集器的行为。你应该有一些类似GC的东西。。。释放211K,71%释放300K/1024K,外部0K/0K,几乎每次旋转时都在日志中暂停1ms+1ms。注意这部分的变化:300K/1024K。如果没有内存泄漏,第一部分应该会增长,然后在几次GCs后变小。如果内存泄漏,它将不断增长,直至出错
我的另一个关于内存泄漏的答案
如果您确定没有泄漏,并且您正在蜂巢上操作,您可以像这样增加应用程序可访问的堆大小:
android:largeHeap=“true”
但只有在处理一些huuuge位图或视频时才建议这样做。尝试了旋转。根据您的条件,似乎不是内存泄漏。从5000转到7000,再转回到5000,然后旋转20-30圈后反弹。是的,看起来没问题。也许这不是一个错误?他怎么知道是一个?他有一个FC?也许告诉他复制报告并发送给你(这是堆栈跟踪)?不过,我不确定报告是否出现在所有系统上。