2012-01-27 52 views
2

点击按钮时,我想开始一个5分钟的计时器,然后执行一个方法来检查某些条件并在条件正确的情况下启动警报。我已经看过定时器和postDelay的例子,但是不太明白为什么会使用一个vs另一个。什么是最好的方式来完成我想要做的事情?我不想在5分钟内锁定用户界面。在倒计时期间,用户应该可以自由地使用应用程序。如何在Android中延迟X代码的执行时间

编辑︰我想postDelayed建议,但视觉工作室不喜欢我的代码的东西。它看起来完全像我找到的例子。我是Android的东西的单声道。

Handler h = new Handler(); 
Runnable r = new Runnable(){ 
     public void run() 
      { 
       Dialog d = inst2.showBuilder(this, "test", "test"); 
       d.Show(); 
      } 
     }; 
h.postDelayed(r, 5000); 

具体运行的内码块抛出各种“}预期”和“命名空间不能直接包含成员如字段或方法”的异常。

回答

4

尝试使用计时器对象:

Timer mTimer = new Timer(); 
    mTimer.schedule(new TimerTask() 
    { 
     @Override 
     public void run() 
     { 
      // Your code goes here 
     } 
    }, 1000); // 1sec 

final Handler handler = new Handler(); 

    Timer timer = new Timer(); 
    timer.schedule(new TimerTask() 
    { 
     @Override 
     public void run() 
     { 
      handler.post(new Runnable() 
      { 
       public void run() 
       { 
        // YOUR Code 
       } 
      }); 
     } 
    }, 1000); // 1sec 
+0

这似乎是工作确定。现在只需要弄清楚如何显示一个alertdialog,如果该应用程序是在一个不同于引发定时器的环境中。但这是一个单独的问题。谢谢! – jmease 2012-01-27 14:21:14

+0

@jmease请参阅编辑 – ChristopheCVB 2012-01-27 14:24:20

0

您可以开始一个简单的Thread,它将在后台睡眠5分钟,然后调用一个函数。当线程在后台休眠时,UI将不会冻结。当线程完成你想要的东西时,你可以通过发送一些意图作为通知来发出警报,并在Broadcast Receivers中接收它们。 希望这会有所帮助

0

使用Handler.postDelayed(Runnable block);方法来执行延迟,因为android也不推荐使用timer。

0
Handler h = new Handler(); 
Action myAction =() => 
{ 
    // your code that you want to delay here 
}; 

h.PostDelayed(myAction, 1000);