所以,我正在开发一个Android游戏,并检查堆和分配情况,以查看内存是否存在任何问题。当我到达堆时,它告诉我为我的游戏分配了33mb,其中31mb是分配给1字节数组类型的。我试图找出为什么这个数字如此之大,但没有成功,也不知道该从哪里入手。有人有任何想法吗?提前感谢!如果您需要更多信息,请告诉我。
我正在通过意图将此活动链接到另一个按钮来运行它,代码如下。我不确定是否与我链接两个活动的方式有关,也许我在那里造成了内存泄漏。
如您所见,我在第二段代码中的按钮上附加了另一个活动,但我想问一下更简单的示例,因为它们都使用相同数量的内存,尽管其中一个使用位图,而另一个则没有。
所以,我的问题基本上是,为什么这么简单的东西需要如此大的堆,并且当像“切断绳索”这样复杂得多的东西只有一半大小时,它会使用这么多堆。 谢谢!
再次编辑:
我刚刚将清单更改为从最简单的开始,并省略了主菜单和其他活动。 多点触摸测试器使用了其13 MB堆中的约12 MB。 我对菜单做了同样的事情,它大约分配了25 MB,并且大部分正在使用它,而我没有展示的另一个类也使用了约25个。
因此,我猜额外使用的内存来自于它将菜单保存在内存中,但我不确定为什么它在首次使用菜单时使用了这么多的内存。 有什么办法可以解决这个问题或者修复它在内存中的保留方式吗?
Will
编辑:
我在发布这篇文章时不太清楚发生了什么事情,很抱歉。
基本上,我制作了一个简单的触摸屏检测器,代码如下所示,当我运行它时,我决定检查堆。正如我上面所说,对于我所做的事情来说,它非常大,只需获取点并使用绘图将圆圈粘贴在其上即可。
public void onDraw(Canvas c)
{
c.drawColor(Color.BLACK);
Point[] touchPlacesHolder = touchPlaces;
for(int i = 0; i < touchPlacesHolder.length; i++)
{
c.drawCircle(touchPlacesHolder[i].x, touchPlacesHolder[i].y, 100, paint);
}
}
public boolean onTouchEvent(MotionEvent event){
touchPlaces = new Point[event.getPointerCount()];
for (int i = 0; i < event.getPointerCount(); i++)
{
touchPlaces[i] = new Point((int) event.getX(i), (int) event.getY(i));
}
return true;
}
我正在通过意图将此活动链接到另一个按钮来运行它,代码如下。我不确定是否与我链接两个活动的方式有关,也许我在那里造成了内存泄漏。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Window win = getWindow();
win.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
final Button newGame = (Button) findViewById(R.id.new_game_button);
newGame.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// Perform action on clicks
Intent intent = new Intent(v.getContext(), Platformer.class);
startActivity(intent);
}
});
final Button levelEditor = (Button) findViewById(R.id.level_editor);
levelEditor.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(v.getContext(), LevelEditor.class);
startActivity(intent);
}
});
}
如您所见,我在第二段代码中的按钮上附加了另一个活动,但我想问一下更简单的示例,因为它们都使用相同数量的内存,尽管其中一个使用位图,而另一个则没有。
所以,我的问题基本上是,为什么这么简单的东西需要如此大的堆,并且当像“切断绳索”这样复杂得多的东西只有一半大小时,它会使用这么多堆。 谢谢!
再次编辑:
我刚刚将清单更改为从最简单的开始,并省略了主菜单和其他活动。 多点触摸测试器使用了其13 MB堆中的约12 MB。 我对菜单做了同样的事情,它大约分配了25 MB,并且大部分正在使用它,而我没有展示的另一个类也使用了约25个。
因此,我猜额外使用的内存来自于它将菜单保存在内存中,但我不确定为什么它在首次使用菜单时使用了这么多的内存。 有什么办法可以解决这个问题或者修复它在内存中的保留方式吗?