如何在Activity中创建无限循环

时间:2012-07-18 08:55:10

标签: android

当某人正在做一些游戏时,他们可以这样做:mainActivity扩展Activity,在这个主要活动中有一个方法,例如:

setContentView(BouncingBallView);

BouncingBallView扩展View我们有方法:onDraw() invalidate()这些方法用于进行更新,它们在所有帧中执行。

我的问题是我希望有一些类似“onDraw-invalidate”的方法,这些方法是更新但在Activity课程中不在View中。

我想知道是否有一些主循环,方法一直在执行一些update()?我知道在Activity中有:onCreate(); onStart(); onRestart(); onResume(); onPause(); onStop();和onDestroy(),但我看不到更新?我该怎么做?

3 个答案:

答案 0 :(得分:3)

您想要定期更新吗?然后计时器可能是一种方法。在您的活动的onStart中创建一个计时器实例,并按如下方式安排具有所需延迟的更新任务:

public class MyActivity extends Activity {
  ...
  private Timer timer;
  private BouncingBallView ballView;

  ...

  @Override
  public void onResume() {
    timer = new Timer();
    // This timer task will be executed every 1 sec.
    timer.schedule(new TimerTask() {
      @Override
      public void run() {
        ballView.update();
      }
    }, 0, 1000);
  }

  ...

  @Override
  public void onSuspend() {
    // Suspend the updates when the activity is inactive.
    timer.cancel();
  }
}

请注意,计时器任务在单独的线程中运行,并且在Android中修改与创建它们的线程不同的线程中的UI元素可能会导致问题。如果你遇到这些问题,处理程序(android.os.Handler)是有用的,而在Honeycomb中有更好的解决方案,但Timer / Handler组合在旧版本中运行良好。

答案 1 :(得分:2)

以下是可以指导您完成游戏更新循环的最佳示例。

Android Game Programming 3. Game Loop and Animation.

这肯定会帮到你。

由于

答案 2 :(得分:1)

您的主要问题是实施游戏循环。有很多方法可以做到这一点,你可以在一些教程或书中找到。其中一种方法是:http://obviam.net/index.php/a-very-basic-the-game-loop-for-android/