android定时器

来源:互联网 发布:软件专业前景 编辑:程序博客网 时间:2024/06/01 10:24

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

0 0
原创粉丝点击