2012-07-29 25 views
3

這怎麼能在android中完成?Android中的Java定時器

public final Timer timer = new Timer(10, new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      // Do task here  
     } 
    }); 

我需要能夠調用timer.start();從

+0

[你嘗試過什麼?](http://whathaveyoutried.com) – nkr 2012-07-29 10:22:12

回答

7

在大多數情況下,使用處理程序而不是定時器是好得多。處理程序能夠發送延遲的消息。使用處理程序的好處是:

  • 其上運行的主(UI)線程 - >可以訪問次數(不像 定時器,它不能dircetly訪問查看)
  • 您可以刪除,如果你想掛起延遲的消息
  • 更少的代碼

實施例:

class MyActivity extends Activity { 

    private static final int DISPLAY_DATA = 1; 
    // this handler will receive a delayed message 
    private Handler mHandler = new Handler() { 
     @Override 
     public void handleMessage(Message msg) { 
      // Do task here 
      if (msg.what == DISPLAY_DATA) displayData(); 
     } 
}; 

@Override 
void onCreate(Bundle b) { 
    //this will post a message to the mHandler, which mHandler will get 
    //after 5 seconds 
    mHandler.sendEmptyMessageDelayed(DISPLAY_DATA, 5000); 
} 
} 
+0

給我致命的異常定時器-0 – 2012-07-29 11:14:27

+0

好了解決了錯誤,但我怎麼稱這種方法可以說每2秒? – 2012-07-29 12:08:00

+1

如果你想要的信息每兩秒鐘,去爲: 「私人處理程序mHandler =新的處理程序(){ @覆蓋 無效的handleMessage(信息MSG){// 做這裏的任務 如果(msg.what == DISPLAY_DATA )displayData(); mHandler.postEmptyMessageDelayed(DISPLAY_DATA,2000); } };' Rr您可以從定時器向消息處理器發送消息。 – 2012-07-29 13:37:04

3

該定時器是在活動嘗試這樣的:

// this will run when timer elapses 
TimerTask myTimerTask = new TimerTask() { 

    @Override 
    public void run() { 
     // ... 
    } 

}; 

// new timer 
Timer timer = new Timer(); 

// schedule timer 
timer.schedule(myTimerTask, delayInMs); 

如果你想在活動的主線程來完成任務,修改如下:

// get a handler (call from main thread) 
final Handler handler = new Handler(); 

// this will run when timer elapses 
TimerTask myTimerTask = new TimerTask() { 
    @Override 
    public void run() { 
     // post a runnable to the handler 
     handler.post(new Runnable() { 
      @Override 
      public void run() { 
       // ... 
      } 
     }); 
    } 
}; 

// new timer 
Timer timer = new Timer(); 

// schedule timer 
timer.schedule(myTimerTask, delayInMs); 
+0

而不是使用'Handler'你可以簡單地調用'runOnUiThread(Runnable接口)'。 – 2016-08-03 08:40:44

+0

是的,但只在一個活動... – 2017-09-23 20:02:00

3

Android有一個不錯的CountDownTimer類也

+0

我不知道!謝謝@alex :) – steve 2013-05-28 04:22:58

0

我已經回答這個在另一個問題。

我會避免TimerTask,如果你把它們中的很多關掉,它們不僅難以管理,而且性能也不好。

這幾天我會爲幾乎任何基於時間的任務推薦Handler

Timer application