Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java/android环境下的时间+;崩溃应用程序_Java_Android_Utility - Fatal编程技术网

java/android环境下的时间+;崩溃应用程序

java/android环境下的时间+;崩溃应用程序,java,android,utility,Java,Android,Utility,好了,伙计们,我正在制作一个android定时器应用程序,它一直在崩溃。我使用的是一个计时表,当它达到25分钟时会重置,然后再开始。这是通过单击Listener上的start按钮中的for循环完成的。在循环中,我有另一个while循环,在该循环中,我通过语句将经过的时间的值分配给一个长类型变量 //while循环内for循环的内容 while(found==1){ temp = chrono.getBase() + SystemClock.elapsedReal

好了,伙计们,我正在制作一个android定时器应用程序,它一直在崩溃。我使用的是一个计时表,当它达到25分钟时会重置,然后再开始。这是通过单击Listener上的start按钮中的for循环完成的。在循环中,我有另一个while循环,在该循环中,我通过语句将经过的时间的值分配给一个长类型变量

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

 while(found==1){
                temp = chrono.getBase() + SystemClock.elapsedRealtime();
                if(temp == 25*60*1000){
                    found--;
                }
我乘以1000,因为时间是以毫秒为单位的?是我做错了还是别的什么事。
谢谢。

您正在消耗CPU,而且可能永远不会停止。温度恰好为25*60*1000的可能性非常低。将“==”检查更改为“>=”。另外,对found使用“boolean”:这更有意义。

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


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

找到了什么
以及您将其初始化为什么?可能添加temp>=25*60*1000?自上次检查以来,可能经过了更长的时间,然后循环永不结束…found被初始化为1,这样当temp等于指定值后while循环中断,并且由于while循环是for括号中的最后一个for循环,因此while循环再次启动。它不起作用的原因是什么?从问题文本中,我无法理解你的问题是什么。请再问一个问题?自从秒表启动以来,我一直在找时间,我做得很好。Temp是保存该值的变量。取决于'chrono.getBase()'的值。我认为正确的计算应该是“elapsedRealtime-initialTime”。很抱歉,我无法尝试此foobar活动?那次。我现在正试图实现它,但不知道如何实现。我想让计时器在25分钟后复位。我的问题是什么进入了这个可运行的,时间检查?
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);
   }
};