2012-01-14 31 views
4

所以,我工作的一个游戏在Android中,我被检查出堆和分配,看是否有什么记忆脚麻,什么不是。当我到达堆栈时,它告诉我它为我的游戏分配了33 MB,而31 MB分配给了1字节的数组类型。我试着弄清楚为什么这么大,但我没有运气,甚至不知道要寻找什么。有没有人有任何想法?提前致谢!让我知道你是否需要更多信息。的Android堆1字节数组类型非常大

请问

编辑:

我是不是发生了什么事,对不起十分清楚,已经很晚了,当我张贴了这个。

基本上我做了一个简单的多点触摸检查器,代码的下方,并且当我跑它,我决定检查堆。正如我上面说这是因为我在做什么非常大的,刚开点,并使用画

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; 
    } 

我被通过的意图将其链接到一个按钮上的另一个运行此活动坚持就可以了一圈,代码在下面。我不确定它是否与我连接2的方式有关,也许我在那里导致了内存泄漏。

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 mbs。我为菜单做了同样的事情,它分配了大约25 MB,并且使用了大部分,而另一个没有显示的类使用了大约25个。

所以,我猜测额外的内存使用它拿着它在内存中的菜单,但我不知道为什么它是使用这么多的内存在首位的菜单。任何想法如何修复或修复它在内存中的方式?

回答

1

两个速度和内存可能的优化:

1.how有关使用最大触摸事件的一个固定大小的数组,并更新它,而不是创建一个新的每一次?它是一个处理两者的单线程,所以不应该有任何担心的地方。

2.只验证应更新的区域。这可以提高速度。

3.只在您知道要更新之前更新触摸事件。

4.not知道什么是游戏,但您可以使用一个固定大小的位图和写入的,而不是节约的触摸事件。

5.since这是一个游戏,大部分的内存可能是用于图像,声音和视频。尝试检查是否有问题。因为你检查过的类是1个字节的数组,所以可能是图像的情况。对装重资源的更多信息,请查看:具有较大的堆大小可能表明你正在创建大量的小物件或在短时间内的几个大型物体的 http://developer.android.com/training/displaying-bitmaps/index.html

,因为GC需要一定的时间,直到它做一些事情。