【问题标题】:Android- executing commands while countdown timer is runningAndroid-在倒数计时器运行时执行命令
【发布时间】:2015-06-10 01:59:38
【问题描述】:

我正在尝试编写一个应用程序,在 textview 上向用户显示一个字符串,并根据用户输入替换文本。这应该以 60 秒的时间间隔发生。 我尝试使用倒数计时器,它在 onFinish 方法上将布尔变量设置为 false。虽然这个布尔值是正确的,但我正在尝试更改文本视图中的字符串(进一步的工作将是由于用户操作而更改文本,但我仍在尝试让这项工作用于简单的操作)。

目前,该应用似乎被卡住了,没有任何反应,但如果我删除了 while 循环,屏幕上会出现一个文本(应该是这样)。

为此目的使用 while 循环是否有问题?与计时器一起工作有不同的方式吗?

(p.s我知道代码中存在一些问题,但这只是为了隔离问题。谢谢!)

编辑: 我将尝试澄清我的意图: 我想给用户任务,他应该在给定的时间内执行。我想在屏幕上显示剩余时间以及要执行的任务。当用户完成任务后,如果时钟上还有时间,他会按下一个按钮,另一个任务会出现。目标是在给定时间内完成尽可能多的任务。

我的代码:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_start_game);

    Bundle b = getIntent().getExtras();
    game = b.getParcelable("game_record");

    figuresList = new ArrayList<String>(game.getFiguresList());

    clockView = (TextView) findViewById(R.id.clockView);
    figureText = (TextView) findViewById(R.id.figureText);

    timer = new CountDownTimer(10000, 1000) {

        public void onTick(long millisUntilFinished) {
            clockView.setText(Long.toString(millisUntilFinished / 1000));
        }

        public void onFinish() {
            clockView.setText("done!");
            isTurn = false;
        }
    };

    playRound();
}

private void playRound() {

    figuresIterator = figuresListUsage.iterator();
    isTurn = true;
    String nextFigure = figuresIterator.next();
    timer.start();

    while (isTurn == true) {
        figureText.setText(nextFigure);
        nextFigure = figuresIterator.next();
    }
}

【问题讨论】:

  • 删除循环并将figureText.setText(nextFigure); nextFigure = figuresIterator.next(); 添加到您的onTick()。您不需要布尔值,因为一旦计数器完成,它将停止更改文本。
  • 是的,但这只是解决此问题的一种解决方法,正如我所说,这是我需要的简化案例。这样做会在固定时间更改文本,而我想根据用户输入来更改它
  • 您的问题不清楚。那你为什么要使用CountDownTimer?也许你想see here 了解如何使用 TextWatcher
  • 我想给用户任务,他应该在给定的时间内执行。我想在屏幕上显示剩余时间以及要执行的任务。当用户完成任务后,如果时钟上还有时间,他会按下一个按钮,另一个任务会出现。目标是在给定时间内完成尽可能多的任务。
  • 这样就更清楚了。你想什么时候检查输入?在每个角色上,也许用户在尝试任务后单击了一个按钮,有些不同?

标签: android timer


【解决方案1】:

理解您的游戏逻辑有点困难,但我看到您的代码的主要问题是您在生命周期事件处理程序中进入循环。看看这个lifecycle description。您将在 onCreate 中停止它,并且在活动完成其生命周期处理之前仍有工作要做。
我建议您尝试将游戏回合事件绑定或使用不同的线程。有很多适用于 android 的线程 API,因为我不知道你的游戏回合的性质,所以我不能推荐任何。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    相关资源
    最近更新 更多