簡體   English   中英

android中的Java Timer

[英]Java Timer in android

怎么能在android中完成?

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

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

我需要能夠調用timer.start(); 來自計時器所在的活動。

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

  • 它運行在主(UI)線程上 - >可以訪問視圖(不像Timer,它不能直接訪問視圖)
  • 如果需要,您可以刪除待處理的延遲消息
  • 更少的代碼

例:

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);
 }
}

嘗試這樣的事情:

// 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);

如果您希望在activity的主線程中完成任務,請像下面這樣修改它:

// 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);

Android也有一個很好的CountDownTimer

我在另一個問題上回答了這個問題。

我會避免使用TimerTask,如果你關掉它們很多,它們不僅難以管理而且對性能有害。

這些天我會推薦一款Handler用於幾乎任何基於時間的任務。

請參閱定時器應用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM