我有以下问题,你们中的一些人必须在我的 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));
再一次,告诉我你是否想知道更多。