android定时器


android 在很多功能中需要使用定时器功能,例如定时刷新某个控制、倒计时功能、模拟时间显示等。

定时器的实现有以下几种方法:

一、使用Timer

创建一个定时器Timer timer = new Timer();

创建定时器任务

TimerTask task = new TimerTask() {
    @Override
    public void run() {
        // 需要做的事:发送消息
        Message message = mHandler.obtainMessage();
        message.what = 1;
        mHandler.sendMessage(message);
    }
};
因为子线程中不能直接更新UI,所以在Timer 的 run中需要使用Handler来更新UI。

//处理handler发送的消息
private Handler mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        switch (msg.what) {
            case 1:
                //处理任务
                doThing();
                break;
            default:
                break;
        }
    }

};

开始执行Timer

timer.schedule(task, DTIME, DTIME); // 1s后执行task,经过1s再次执行
APIs中的相关函数
public void schedule(TimerTask task,Date when, long period)

在一个指定的时间到达后,按照固定的时间重复执行一个特定的任务。

public void schedule(TimerTask task, long delay, long period)

在一个特定的延迟时间过后,按照固定的时间重复执行一个特定的任务。

public void schedule(TimerTask task,Date when)

在一个指定的时间到达后,执行一个特定的任务。

public void schedule(TimerTask task, long delay)

在一个特定的延迟时间过后,执行一个特定的任务。

public void scheduleAtFixedRate(TimerTask task, long delay, long period)

在一个特定的延迟时间过后,按照固定的比率重复执行一个特定的任务。

public void scheduleAtFixedRate(TimerTask task,Date when, long period)

在一个指定的时间到达后,按照固定的比率重复执行一个特定的任务。

名称解释:

task : 特定的任务

when : 指定的执行时间

delay :  第一次执行之前的时间,以毫秒为单位

period :  后续的执行时间间隔,以毫秒为单位


在页面销毁时,在onDestroy() 中注销Timer.

if (timer != null)
    timer.cancel();

二、使用线程休眠的方式实现定时器

创建一个线程 new Thread(mRunnable).start();

private Runnable mRunnable = new Runnable() {
    public void run() {
        while(true) {
            try {
                Thread.sleep(1000);
                Message message = mHandler.obtainMessage();
                message.what = 1;
                mHandler.sendMessage(message);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
};

Handler同上


三、使用Handler

new Handler().postDelayed()

public final boolean postDelayed(Runnable r, long delayMillis)
new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        //doThing();
    }
}, 1000);


r : 执行体

delayMillis :延迟(以毫秒为单位)一定时间后执行Runnable

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值