android中的Java定时器



如何在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)线程上运行->可以访问视图(与计时器,无法直接访问视图)
  • 如果需要,可以删除挂起的延迟邮件
  • 更少的代码

示例:

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

Android有一个不错的CountDownTimer类,也是

试试这样的东西:

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

我已经在另一个问题中回答了这个问题。

我会避免TimerTask,如果你解雇了很多人,他们不仅很难管理,而且对性能不利。

对于目前几乎所有基于时间的任务,我都建议使用Handler

请参阅计时器应用程序

最新更新