4.0设备上的OutOfMemory错误,但在2.2和2.3.3设备上正常工作

时间:2013-09-20 11:25:48

标签: android bitmap out-of-memory android-4.0-ice-cream-sandwich

在我的应用中,我有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中是否存在与此相关的错误?

有人可以指导我吗?

编辑(1)

logcat的

ViewFlipper

1 个答案:

答案 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);
   }