2

我有一个带有按钮的活动。当我按下那个按钮时,应该每 10 分钟调用一次方法。

我正在尝试使用 aHandler和 a来做到这一点Timer。但无法得到结果。

4

5 回答 5

20

创建一个Timer对象并给它一个TimerTask执行您想要执行的代码的对象。

Timer timer = new Timer ();
TimerTask hourlyTask = new TimerTask () {
    @Override
    public void run () {
        // your code here...
    }
};

// schedule the task to run starting now and then every hour...
timer.schedule (hourlyTask, 0l, 1000*60*60);   // 1000*10*60 every 10 minut

使用 Timer 对象的优点是它可以处理多个 TimerTask 对象,每个对象都有自己的计时、延迟等。您还可以通过将 Timer 对象声明为类来启动和停止定时器变量什么的。

于 2012-11-29T12:49:41.987 回答
3

使用以下代码,其中 notifyme() 在您作为第二个参数给出的毫秒数之后被重复调用

    Timer timer = new Timer();
    timer.schedule(new TimerTask()
    {
       public void run()
       {
           View v = new View(getApplicationContext());
           notifyMe(v);
       }},4000,100000);

    }
于 2012-11-29T12:51:09.070 回答
2

如果您不需要在后台运行您的应用程序,请使用AlamManager 。否则,您可以拥有一个不断运行的服务和一个CountDownTimer

于 2012-11-29T12:50:03.150 回答
1

警报管理器适用于您希望应用程序代码在特定时间运行的情况,即使您的应用程序当前没有运行。

对于正常的计时操作(滴答声、超时等),使用 Handler 更容易、更高效。

于 2012-11-29T12:52:33.323 回答
1

-它更好用Service,它Activity 没有 View

- Service可以有界或无界Activity.

有关服务示例,请参阅此链接:

http://www.vogella.com/articles/AndroidServices/article.html

-但是,如果您仍然想使用 Thread,那么试试这个...

1.如果你的Thread (Non-UI)没有在Dedicated UI线程上发布任何数据,那么就没有必要使用Handler,但如果是,那么Handler是必须的。

例如:

Handler h;    
onCreate() {    
  h = new Handler();
  new Thread(new Runnable() {
    public void run(){
      while(true){
        try{
          h.post(new Runnable(){
            public void run(){
              go();
            }
          }
         TimeUnit.MINUTES.sleep(10);
       }
       catch(Exception ex){
       }
     }
    }
  }).start();
} 
public void go(){
  // This method is called every 10 minutes
}

Painless Threading您也可以使用称为的东西来做同样的事情AsyncTask

于 2012-11-29T13:05:48.580 回答