解析 Java 中的 Timer 和 TimerTask 在 Android 中的用法和实例
这里有新鲜出炉的 Java 并发编程示例, 程序狗速度看过来!
Java 程序设计语言
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言, 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台 (即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se)) 的总称
本篇文章主要介绍了解析 Java 中的 Timer 和 TimerTask 在 Android 中的用法, 主要介绍了 Timer 和 TimerTask 的用法, 有需要的可以了解一下
在开发中我们有时会有这样的需求, 即在固定的每隔一段时间执行某一个任务比如 UI 上的控件需要随着时间改变, 我们可以使用 Java 为我们提供的计时器的工具类, 即 Timer 和 TimerTask
Timer 是一个普通的类, 其中有几个重要的方法; 而 TimerTask 则是一个抽象类, 其中有一个抽象方法 run(), 类似线程中的 run()方法, 我们使用 Timer 创建一个他的对象, 然后使用这对象的 schedule 方法来完成这种间隔的操作
schedule 方法有三个参数
第一个参数就是 TimerTask 类型的对象, 我们实现 TimerTask 的 run()方法就是要周期执行的一个任务;
第二个参数有两种类型, 第一种是 long 类型, 表示多长时间后开始执行, 另一种是 Date 类型, 表示从那个时间后开始执行;
第三个参数就是执行的周期, 为 long 类型
schedule 方法还有一种两个参数的执行重载, 第一个参数仍然是 TimerTask, 第二个表示为 long 的形式表示多长时间后执行一次, 为 Date 就表示某个时间后执行一次
Timer 就是一个线程, 使用 schedule 方法完成对 TimerTask 的调度, 多个 TimerTask 可以共用一个 Timer, 也就是说 Timer 对象调用一次 schedule 方法就是创建了一个线程, 并且调用一次 schedule 后 TimerTask 是无限制的循环下去的, 使用 Timer 的 cancel()停止操作当然同一个 Timer 执行一次 cancel()方法后, 所有 Timer 线程都被终止
用法:
- //true 说明这个 timer 以 daemon 方式运行(优先级低, 程序结束 timer 也自动结束)
- java.util.Timer timer = new java.util.Timer(true);
- TimerTask task = new TimerTask() {
- public void run() {
- // 每次需要执行的代码放到这里面
- }
- };
- // 以下是几种调度 task 的方法:
- //time 为 Date 类型: 在指定时间执行一次
- timer.schedule(task, time);
- //firstTime 为 Date 类型, period 为 long, 表示从 firstTime 时刻开始, 每隔 period 毫秒执行一次
- timer.schedule(task, firstTime, period);
- //delay 为 long 类型: 从现在起过 delay 毫秒执行一次
- timer.schedule(task, delay);
- //delay 为 long,period 为 long: 从现在起过 delay 毫秒以后, 每隔 period 毫秒执行一次
- timer.schedule(task, delay, period);
示例代码:
- import android.app.Activity;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Message;
- import java.util.Timer;
- import java.util.TimerTask;
- public class TimerTaskActivity extends Activity {
- private Timer mTimer;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- // init timer
- mTimer = new Timer();
- // start timer task
- setTimerTask();
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- // cancel timer
- mTimer.cancel();
- }
- private void setTimerTask() {
- mTimer.schedule(new TimerTask() {
- @Override
- public void run() {
- Message message = new Message();
- message.what = 1;
- doActionHandler.sendMessage(message);
- }
- }, 1000, 1000/* 表示 1000 毫秒之後, 每隔 1000 毫秒執行一次 */);
- }
- /**
- * do some action
- */
- private Handler doActionHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- super.handleMessage(msg);
- int msgId = msg.what;
- switch (msgId) {
- case 1:
- // do some action
- break;
- default:
- break;
- }
- }
- };
- }
来源: http://www.phperz.com/article/18/0205/359447.html