Android游戏线程建议

时间:2012-05-07 18:57:13

标签: android multithreading

我对在Android操作系统上设计和开发2D游戏的最佳做法有疑问。在Lunar Lander示例之后,我让我的游戏在一个单独的线程上运行,因此它不会阻止UI线程。然而,一旦某些“波浪”在游戏中结束,我想显示一个屏幕来计算该波的分数,显示奖金等。我正在考虑通过在结尾处调用startActivityForResult()来将其作为单独的活动。海浪。由于我不在主线程中,最好的方法是什么?这甚至会被认为是一种好习惯吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

在主UI线程中创建Handler。让它处理wave结束的消息。在游戏线程中,在Handler.sendMessage(WAVE_END).sendToTarget()上调用Handler告诉UI线程波结束。 Handler将执行您想要的代码。

示例:

public int MSG_WAVE_END = 1;

private final Handler endWave = new Handler() {
  @Override
  public void handleMessage(Message msg) {
    if(msg.what == MSG_WAVE_END) { // the number is arbitrary. Traditionally a constant
       // Do what you want to do when a wave ends like startActivityForResult()
    }
  }
}

然后在你的游戏线程中,当你的wave结束时调用它:

endWave.obtainMessage(MSG_WAVE_END).sendToTarget();

Handler基本上充当回调。您可以安全地在线程之间发送“消息”,以便在创建它的任何线程上执行代码。如果需要,您还可以传递两个整数参数和一个对象。它将包含在Message对象中。

答案 1 :(得分:0)

This可能对您的情况有用。简而言之,startActivityForResult是同步的,所以如果你不介意暂停你的服务,那么这是有效的。否则,将得分活动回叫给服务。