开发者社区> 问答> 正文

使用CountDownTimer方法暂停循环,直到方法完成

我试图通过循环一段将每种颜色保持一定时间后将TextView的背景从红色切换为黄色到绿色的代码段来创建一个模仿交通信号灯的应用程序。用户将可以通过按下按钮来开始和结束循环。我已经使用CountDownTimers将TextView的每个背景保持一定的时间,并且该方法似乎运行良好。我的代码的当前状态如下:


    public void trafficLight() {
        lightDisplay.setBackgroundColor(Color.RED);

        // Temporary for loop, a do-while loop causes the app to crash
        for (int x = 2; x <= 4; x++) {
             signalSwitcher(3000, Color.YELLOW);
             signalSwitcher(6000, Color.GREEN);
             signalSwitcher(9000, Color.RED);
        }
    }


    public void signalSwitcher(long delayTime, final int signalColor) {
        new CountDownTimer(delayTime, 1000) {

            @Override
            public void onTick(long millisUntilFinished) {
            }

            @Override
            public void onFinish() {
                lightDisplay.setBackgroundColor(signalColor);
            }

        }.start();

我似乎无法使trafficLight方法中的代码循环,因为我还没有找到在背景更改周期完成之前暂停另一个循环迭代的开始的方法。换句话说,当我运行代码时,循环会继续在CountDownTimers中调度任务;它没有计划,等待任务完成,然后重复。

解决该问题的最佳尝试是在signalSwitcher方法的末尾有另一个do-while循环,该循环会重新检查参数,直到最后一个signalSwitcher方法提供退出该循环所需的输入为止。但是,由于尝试运行应用程序时出现空白屏幕,因此该方法似乎无效。

简而言之,如何在执行CountDownTimers内部的代码之前暂停循环?

展开
收起
Puppet 2020-01-15 10:36:46 1981 0
1 条回答
写回答
取消 提交回答
  • 我认为没有直接的api可以暂停和恢复计时器。但是您可以取消它,然后记录剩余时间。用剩余时间重新创建一个计时器。

    2020-01-15 10:36:58
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载