0

好的,伙计们,我正在制作一个不断崩溃的android计时器应用程序。我正在使用一个计时器,它会在达到 25 分钟时重置,然后重新开始。这是通过单击监听器的开始按钮中的 for 循环来完成的。在循环中,我有另一个 while 循环,在该循环中,我通过语句为 long 类型变量分配经过时间的值

// for 循环内while循环的内容

 while(found==1){
                temp = chrono.getBase() + SystemClock.elapsedRealtime();
                if(temp == 25*60*1000){
                    found--;
                }

我乘以 1000 因为时间以毫秒为单位?我做错了还是其他原因。谢谢。

4

2 回答 2

2

while 循环可能会阻塞主 UI 线程,直到满足条件found==1。您可能需要的是 aTimer和 a TimerTask。或者,按照本文的建议,您可以使用处理程序启动 Runnable,以每 50 或 100 毫秒更新一次计时器时间。这是一个示例(未经测试和改编自链接文章!):

private Handler handler = new Handler();
handler.postDelayed(runnable, 100);

private Runnable runnable = new Runnable() {
   @Override
   public void run() {
      /* do what you need to do */
      boolean isTimerReady=foobar();
      /* and here comes the "trick" */
      if (!isTimerReady) handler.postDelayed(this, 100);
   }
};

这开始foobar()每 100 毫秒。foobar()应该返回一个布尔值 - 基本上是您的 while 循环中的计算,并更新用户界面。一旦foobar()返回 true,Runnable则不会重新启动。

于 2013-02-07T13:16:17.803 回答
0

您正在杀死 CPU,并且可能永远不会停止。temp 恰好为 25 * 60 * 1000 的可能性非常低。将“==”检查更改为“>=”。此外,对 found 使用“布尔值”:它更有意义。

于 2013-02-07T13:06:36.307 回答