解析Java中的Timer和TimerTask在Android中的用法和实例_java

在开发中我们有时会有这样的需求,即在固定的每隔一段时间执行某一个任务。比如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;
  }
 }
 };
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, timer
, timertask
, android的timertask
android的timertask
timertask用法、java timertask用法、timertask、android timertask、timertask 定时刷新,以便于您获取更多的相关知识。

时间: 2024-08-01 14:38:46

解析Java中的Timer和TimerTask在Android中的用法和实例_java的相关文章

Java中的Timer和TimerTask在Android中的用法

在开发中我们有时会有这样的需求,即在固定的每隔一段时间执行某一个任务.比如UI上的控件需要随着时间改变,我们可以使用Java为我们提供的计时器的工具类,即Timer和TimerTask. Timer是一个普通的类,其中有几个重要的方法:而TimerTask则是一个抽象类,其中有一个抽象方法run(),类似线程中的run()方法,我们使用Timer创建一个他的对象,然后使用这对象的schedule方法来完成这种间隔的操作. schedule方法有三个参数 第一个参数就是TimerTask类型的对象

android-VB中base64编码如何转换到Android中,已有初步代码,但转换结果不一致

问题描述 VB中base64编码如何转换到Android中,已有初步代码,但转换结果不一致 没搞过VB 现在给我一串VB中的base64编码,移植到Android中,按照我的想法写好之后,发现编码之后的结果并不一样,请大家给我看看. VB: Set m_oXMLElement = m_oXMLDoc.createElement("TmpBase64") m_oXMLElement.dataType = "bin.base64" Public Function Enc

Android中定时器Timer和TimerTask的启动,停止,暂停,继续等操作实例

下面是一个在Android中使用定时器Timer和TimerTask的启动,停止,暂停,继续等操作的demo. 需要注意的问题主要有两点: 1.Timer和TimerTask在调用cancel()取消后不能再执行 schedule语句,否则提示出错,提示如下: D/AndroidRuntime( 6672): Shutting down VM W/dalvikvm( 6672): threadid=1: thread exiting with uncaught exception (group=

java中利用反射调用另一类的private方法的简单实例_java

我们知道,Java应用程序不能访问持久化类的private方法,但Hibernate没有这个限制,它能够访问各种级别的方法,如private, default, protected, public. Hibernate是如何实现该功能的呢?答案是利用JAVA的反射机制,如下:  import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class ReflectDemo

Java反射之静态加载和动态加载的简单实例_java

静态加载: package com.imooc.加载类; public class Office_Static { public static void main(String[] args) { //new 创建对象,是静态加载类,在编译时刻就需要加载所有的可能使用到的类 if("Word".equals(args[0])){ Word w = new Word(); w.start(); } if("Excel".equals(args[0])){ Excel

解析Java虚拟机中类的初始化及加载器的父委托机制_java

类的初始化 在初始化阶段,Java虚拟机执行类的初始化语句,为类的静态变量赋予初始值. 在程序中,静态变量的初始化有两种途径: 1.在静态变量的声明处进行初始化: 2.在静态代码块中进行初始化. 没有经过显式初始化的静态变量将原有的值.   一个比较奇怪的例子: package com.mengdd.classloader; class Singleton { // private static Singleton mInstance = new Singleton();// 位置1 // 位置

android联系人-关于Android中的contact模块源代码的解析(最好包括流程的执行)

问题描述 关于Android中的contact模块源代码的解析(最好包括流程的执行) Android中的Contact(联系人)模块的原理分析,和解析,现在正在学习的过程中,感觉很繁琐,没有头绪,希望高人给予知道. 解决方案 http://down.51cto.com/data/885308 解决方案二: Contact这块主要是界面和数据,界面加载的时候,通过访问ContactProvider提供的联系人数据库,获取到联系人.可能还包含一些智能搜索,比方说,字母匹配,数字匹配,中文匹配,这些都

Java/Android引用类型及其使用全面分析_java

Java/Android中有四种引用类型,分别是: Strong reference - 强引用 Soft Reference - 软引用 Weak Reference - 弱引用 Phantom Reference - 虚引用 不同的引用类型有着不同的特性,同时也对应着不同的使用场景. 1.Strong reference - 强引用 实际编码中最常见的一种引用类型.常见形式如:A a = new A();等.强引用本身存储在栈内存中,其存储指向对内存中对象的地址.一般情况下,当对内存中的对象

Android 中Handler引起的内存泄露_Android

在Android常用编程中,Handler在进行异步操作并处理返回结果时经常被使用.通常我们的代码会这样实现. public class SampleActivity extends Activity { private final Handler mLeakyHandler = new Handler() { @Override public void handleMessage(Message msg) { // ... } } } 但是,其实上面的代码可能导致内存泄露,当你使用Androi