0

我有以下问题,你们中的一些人必须在我的 android 应用程序上知道:

3288 字节的外部分配对于此进程来说太大。

内存不足:堆大小=5959KB,已分配=3922KB,位图大小=18614KB

VM 不允许我们分配 3288 字节

事实:

  • 我正在创建屏幕的位图(非常大),并对其进行操作(更改大小等...)以进行翻页动画。

  • 它仅在渴望 HTC 时崩溃:在 Galaxy s2 和 kindle fire 上,没有问题。

  • 每次使用以下代码创建新位图时,我已经在取消分配当前位图:

    位图旧 = this.bitmap;

    this.bitmap = bitmap;
    this.invalidate();
    if(old != null)
        old.recycle();
    
  • 我也试着调用这个函数:

    public void recycle() { if (this.bitmap!=null) this.bitmap.recycle(); System.gc(); Runtime.getRuntime().gc(); }

在我的代码中有好几次,有时它会稍微好一些(就像它稍后崩溃一样),但这仍然不好。

  • 我在这个问题上花了很多时间,但我真的不知道如何解决它。好像在论坛上有很多错误信息,所以我有点迷路了。

谢谢,要求更精确。

编辑 :

这是一个叫做很多的代码:

//set the foreground image with the current day
                    Bitmap b = Bitmap.createBitmap(visibleLayout.getWidth(), visibleLayout.getHeight(),Bitmap.Config.ARGB_8888);
                    Canvas c = new Canvas(b);
                    visibleLayout.draw(c);

                    viewBitmapNext.setBitmap(b);

                    viewBitmapNext.setVisibility(View.VISIBLE);

其中 viewBitmapNext 是 View 类的重写元素。上面描述了 setBitmap 函数。

关于调整大小,我做了这行代码:

viewBitmapPrevious.setLayoutParams(new RelativeLayout.LayoutParams((int) (iterator - ((totalWidth - iterator) - activity.getResources().getDimension(R.dimen.margin_right))/2), RelativeLayout.LayoutParams.WRAP_CONTENT));

再一次,告诉我你是否想知道更多。

4

1 回答 1

0

我发现了问题所在。这对任何人都不会感兴趣,因为这是一个与我的项目密切相关的愚蠢错误,但我还是这么说。

我实际上有2个错误:

  • 一个循环无限地创建元素。
  • 在廉价手机上执行某个操作后,我将两张大图片作为背景(我仍在使用它,但应该很容易解决)。完成后我会编辑这个答案。

对于帮助我的每个人,您都找不到问题的解决方案(与我所做的位图屏幕无关),但它仍然很有帮助。

谢谢。

于 2012-07-04T02:24:43.750 回答