Android游戏开发和垃圾收集

时间:2011-01-07 00:02:42

标签: android garbage-collection

我一直在为Android游戏工作并在我的N1上进行调试。起初表现不稳定。然后,我致力于清理所有分配以防止垃圾收集。这大大改善了一些事情,但我仍然看到一些垃圾收集,这些收集导致了动画中非常短暂的暂停。

将我的头发拉出一段时间后,我注意到正在进行垃圾收集的进程ID(GC_FOR_MALLOC)不是我的进程ID。 Process Ids属于“Android System”和android.process.acore(通过使用市场上的“Android System Info”应用程序确定)。 acore进程与称为数字时钟的桌面小部件相关联。我卸载了小部件,几乎完成了整个游戏,没有任何停顿。对于“Android系统”,GC有一个非常短暂的停顿。

很抱歉有很长的解释,但现在我的问题是:

  1. 由于系统进程的GC(某些超出开发人员的控制范围),其他游戏是否偶尔不会暂停?
  2. 在第一个问题的基础上,我如何处理一个不同的应用程序导致GC减慢我的进程并导致我的游戏出现打嗝?
  3. 我觉得有些东西我不知道,因为其他游戏没有这个问题。

    由于

2 个答案:

答案 0 :(得分:3)

你能降低游戏的帧速率吗?也许它正在使用100%的CPU,因此消耗CPU的任何其他东西都会使其滞后。这些设备的速度不如普通PC快。您还可以考虑减少创建每个帧所需的CPU,以保持帧速率足够高以保持平滑。

答案 1 :(得分:0)

 private static Bitmap GetNonTransparentBitmap(int Id) {
  // no transparency
  Drawable tmp = myContext.getResources().getDrawable(Id);

  Bitmap retval = Bitmap.createBitmap(tmp.getMinimumWidth(), tmp.getMinimumHeight(), Bitmap.Config.RGB_565);
  Canvas canvas = new Canvas(retval);
  tmp.setBounds(0, 0, tmp.getMinimumWidth(), tmp.getMinimumHeight());
  tmp.draw(canvas);
  return retval;
 }