在我的应用中,我有7个单选按钮,每个按钮都会带您进行特定的活动。所以总的来说,我有8项活动(家庭活动和7项内部活动)。
7个内部活动中的每个活动都有一个ViewFlipper
,其中包含5到8个视图。
当我在操作系统版本为2.2 的设备上运行此应用程序时,或者在操作系统版本为2.3.3 的设备上运行此应用程序时,它运行正常,但是当我运行时在操作系统版本-4.0 的设备上运行相同的应用程序,它会偶尔抛出 java.lang.OutOfMemoryError (任何地方,例如第二个活动的第3个屏幕' s { {1}})。
SO上的{p> This link建议增加"最大VM应用程序堆大小",但由于我在设备上进行测试,这是不可能的。This other link建议对位图进行采样。我确实每个活动使用15-20个图像(1个作为5-8个屏幕和一些其他图像的背景),但我只将所有图像设置在相应的 xml 文件中。我不会对代码中的位图做任何事情。
在某个地方,我还发现使用 unbindDrawables(),我已将其放在每个活动的 onDestroy()中,但无济于事。
此外,如果内存是真正的问题,那么它如何在2.2和2.3.3上工作,并且不适用于已更新操作系统和整体更好配置的4.0设备。
操作系统版本4.0中是否存在与此相关的错误?
有人可以指导我吗?
logcat的
ViewFlipper
答案 0 :(得分:0)
您可能需要回收您的位图
我不知道这是否可以帮助你
使用此代码创建位图
将IMAGE URI传递给函数
private Bitmap decodeUri(Uri selectedImage) throws FileNotFoundException {
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(
getContentResolver().openInputStream(selectedImage), null, o);
final int REQUIRED_SIZE = 100;
int width_tmp = o.outWidth, height_tmp = o.outHeight;
int scale = 1;
while (true) {
if (width_tmp / 2 < REQUIRED_SIZE || height_tmp / 2 < REQUIRED_SIZE) {
break;
}
width_tmp /= 2;
height_tmp /= 2;
scale *= 2;
}
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
return BitmapFactory.decodeStream(
getContentResolver().openInputStream(selectedImage), null, o2);
}