如何使用TimerTask来运行一个线程?

24

我很难找到关于Android上TimerTask函数的文档。 我需要使用TimerTask在一定时间间隔内运行一个线程,但是不知道如何处理。 希望能提供任何建议或示例。

3个回答

72

我已经实现了类似这样的东西,它运行良好:

    private Timer mTimer1;
    private TimerTask mTt1;
    private Handler mTimerHandler = new Handler();

    private void stopTimer(){
        if(mTimer1 != null){
            mTimer1.cancel();
            mTimer1.purge();
        }
    }

    private void startTimer(){
        mTimer1 = new Timer();
        mTt1 = new TimerTask() {
            public void run() {
                mTimerHandler.post(new Runnable() {
                    public void run(){
                        //TODO
                    }
                });
            }
        };

        mTimer1.schedule(mTt1, 1, 5000);
    }

在日程表中的数字 1 代表什么? - Praneeth
定时器任务中的1表示在第一次执行计划任务之前等待的时间(以毫秒为单位)。5000表示每次执行之间的延迟时间(以毫秒为单位)。 - Cogentleman
1
请注意,这会在创建此类的任何线程上调用Runnable。 - mkrasowski

39
您可以使用Timer,当您使用任何schedule方法安排TimerTask时,它会自动为您创建一个新的线程。
例如:
Timer t = new Timer();
t.schedule(myTimerTask, 1000L);

这将创建一个定时器,在属于该定时器的线程中每秒运行一次myTimerTask


1
以上代码创建了一个定时器,在一秒后在一个线程中执行任务_仅一次_。要每秒运行一次任务,请使用这个重载的schedule方法:schedule(TimerTask task, long delay, long period)。例如,timer.schedule(myTimerTask, 1000L, 2000L)创建一个计时器,在初始延迟1秒后每2秒运行一次。这是该方法的链接[link](https://developer.android.com/reference/java/util/Timer.html#schedule(java.util.TimerTask, long, long))[link]。 - prasad_
上面的评论中链接格式错误。这是 Timer 方法 的正确链接。 - prasad_

11

这是定时任务的完美示例。

Timer timerObj = new Timer();
TimerTask timerTaskObj = new TimerTask() {
    public void run() {
       //perform your action here
    }
};
timerObj.schedule(timerTaskObj, 0, 15000);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接