Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android中的Java定时器_Java_Android_Timer - Fatal编程技术网

android中的Java定时器

android中的Java定时器,java,android,timer,Java,Android,Timer,在安卓系统中如何做到这一点 public final Timer timer = new Timer(10, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // Do task here } }); 我需要能够调用timer.start();从计时器所在的活动中。尝试以下操作: // thi

在安卓系统中如何做到这一点

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

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

我需要能够调用timer.start();从计时器所在的活动中。

尝试以下操作:

// 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);
若要在活动的主线程中完成任务,请按如下方式修改它:

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

Android也有一个很好的类

在大多数情况下,使用处理程序而不是计时器要好得多。处理程序能够发送延迟消息。使用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);
 }
}

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

我会避免使用TimerTask,如果你大量使用TimerTask,它们不仅难以管理,而且会影响性能

我会推荐一个
处理程序
,用于现在几乎所有基于时间的任务


请参阅

给我致命异常计时器-0ok已解决错误,但我如何调用此方法,比如说每2秒一次?如果您希望每2秒收到一次消息,请选择:'private Handler mHandler=new Handler(){@Override void handleMessage(Message msg){//do task here If(msg.what==DISPLAY_DATA)displayData();mHandler.postEmptyMessageDelayed(DISPLAY_DATA,2000);}};'Rr您可以从计时器向处理程序发送消息。如何停止此计时器?这不是计时器,这是延迟消息。要删除它,请调用mHandler.removeMessages(显示数据);我不知道!谢谢@alex:)使用
处理程序
你只需调用
runOnUiThread(Runnable)