`
yxwang0615
  • 浏览: 561038 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

TimerTask代码示例[学习]

 
阅读更多

TimerTask理解为一个定时任务,必须使用Handler更新UI,代码示例:

 

package com.test.activity;

import java.util.Timer;
import java.util.TimerTask;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.MotionEvent;

import com.test.R;

public class TestTimer extends Activity {
    private static final int DOTIMERSUCCESS = 0;
	private static final String TAG = "TestTimer";
	private Timer timer;
	private MyTask myTask;
	@Override
    public void onCreate(Bundle savedInstanceState) {   
        super.onCreate(savedInstanceState);   
        setContentView(R.layout.main); 
        timer = new Timer(); 
	}
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		setTitle("hello world...");
		if(myTask != null){
			//将原任务从队列中移除
			myTask.cancel();
		}
		myTask = new MyTask();// 新建一个任务
		timer.schedule(myTask, 4000);
		return super.onTouchEvent(event);
	}
	
	//主要负责更新UI?
	private  Handler handler = new Handler(){

		@Override
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			if(msg.what == DOTIMERSUCCESS){
				setTitle("计时器已经启动...");
				Log.i(TAG, Thread.currentThread().getName());//main
			}
			super.handleMessage(msg);
		}
	};   
   //计时器任务
   class MyTask extends TimerTask {
  
		public void run() {   
            //Message message = new Message();       
            //message.what = DOTIMERSUCCESS;       
            //handler.sendMessage(message); 
            Log.i(TAG, Thread.currentThread().getName());  //Timer-0
			//或者使用sendToTarget代替sendMessage:
            Message message = handler.obtainMessage(DOTIMERSUCCESS);
            message.sendToTarget();
        }   
   }
  
}

  实现效果是当滑动屏幕时,设置Title为hello world... 4秒后Title变为计时器已经启动...,再洗滑动屏幕Title又变为hello world...,如此反复。要注意每次执行定时任务的时候要先判断上次的任务执行完没有,如果没有则需要先取消上次的任务,然后再开启新任务。从打印的Log上可以看出定时任务并不是运行在主线程之上,和AsyncTask类似。

 

补充:

AsyncTask也存在取消任务的方法, 执行AsyncTask.cancel()后,任务还是执行了(执行了dobackground方法),只是没有返回结果罢了(未执行onPostExecute)。

 

 

Mesage.sendToTarget(); 会将message传给创建它的handler然后,调用handleMessage去处理。

handler.sendMessage(Message) 也是把message穿给handler的handlMessage去处理。

两种方法都差不多。

 

创建Message对象尽量使用Handler.obtainMessage()从消息池中拿现成的,而不要使用new Message()实例化新的Message对象,增加系统开销。

 

分享到:
评论

相关推荐

    TimerTask_Demo.zip

    这个"TimerTask_Demo.zip"提供的例子应该包含了上述的代码框架,你可以下载后进行查看和学习,以便更好地理解和应用`Timer`和`TimerTask`。通过这个基础,你可以创建更复杂的定时任务,比如根据不同的时间间隔或事件...

    timerTask定时任务使用java代码操作svn

    在本项目中,`TimerTask`被用来自动化创建文件夹,并通过Java代码直接与Subversion(SVN)进行交互,从而实现版本控制系统的自动化操作,避免了手动干预。 1. **TimerTask的使用**: - 创建一个继承自`TimerTask`...

    TimerTask定时执行任务

    在本话题中,我们将深入学习如何在Spring2框架下利用`TimerTask`实现定时任务,以及在MyEclipse开发环境中,如何与Tomcat服务器配合使用。 【描述】:基于MyEclipse的集成开发环境,我们可以构建Java Web项目,并...

    安卓短信彩信相关相关-TimerTask结合Handler实现了定时任务可以定时刷新定时验证短信等.rar

    本资源提供的示例就是利用`TimerTask`和`Handler`来实现这样的功能。`TimerTask`是Java中的一个定时任务类,而`Handler`则是Android消息处理机制的核心组件,它们的结合使用可以有效地在Android应用中实现定时操作。...

    Java初学示例(源代码+详细注释)

    这个压缩包包含了一系列的Java学习示例,每个示例都带有详细注释,有助于理解Java的核心概念。 1. **基本语法**:Java的基本语法包括变量声明、数据类型、运算符、流程控制语句(如if-else,for,while,switch-...

    安卓天气日历时间选择倒计时相关-定时器多种触发方式代码简洁易控制.rar

    在安卓平台上,开发一款集天气、日历和时间选择以及倒计时功能的应用,常常需要对时间进行精确的控制。这个压缩包中的内容似乎提供了一些关于...开发者可以根据自己的需求,结合这些代码示例来学习和实现相应的功能。

    3类java定时任务代码

    总结来说,这些代码示例涵盖了使用`Timer`和`ScheduledExecutorService`两种不同方式来实现Java定时任务,以及可能的自定义任务监听器`TaskListener`。通过学习和理解这些代码,开发者可以更好地理解和应用Java的...

    java多线程和定时器学习

    本文将深入探讨这两个主题,并结合实际的代码示例进行讲解。 首先,我们来理解Java多线程。多线程允许一个程序同时执行多个任务,这在处理大量并发操作时非常有用。在Java中,可以通过以下方式创建线程: 1. 继承`...

    JAVA定时运行程序

    - 代码示例: ```java public class TimerTest extends TimerTask { @Override public void run() { // 定义具体的任务逻辑 } } ``` #### 四、代码解析 在提供的代码中,我们看到了一个简单的`TimerTest`...

    android 应用 源代码——定时器

    在Android应用开发中,定时器(Timer)是一个非常重要的组件,它允许开发者在特定的时间间隔执行某些任务。...通过学习提供的源代码,可以深化对定时器实际应用的理解,为今后的开发工作打下坚实的基础。

    Java创建定时器.rar

    总的来说,这个代码示例是一个综合性的Java编程练习,涵盖了定时器、图形绘制、随机数生成以及线程同步等多个知识点,对于学习和理解Java的这些特性非常有帮助。通过分析和运行这个示例,开发者可以更深入地掌握Java...

    TimerDemo.tar.gz

    `TimerDemo.tar.gz`中的示例项目应该包含了如何在Android应用中使用这两个类的实例代码。下面将详细讲解`Timer`和`TimerTask`的工作原理以及在Android环境下的使用方法。 `Timer`类是Java中的一个调度工具,它可以...

    spring2.0学习笔记+spring定时任务

    在提供的压缩包文件“prj_quart”中,我们可以预期找到与Spring 2.0定时任务相关的代码示例、配置文件或教程文档。这些资源可以帮助读者深入理解如何在Spring 2.0中配置和使用Quartz,以及如何编写和调度定时任务。...

    Timer累计计时器,利用系统时间计时 含代码注释

    以下是一个简单的Java代码示例,展示如何使用Timer进行累计计时: ```java import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class TimerDemo { public static void main...

    监听器定时调度实例(很容易学会)

    为了更好地理解这个过程,你可以参考 "listener-model" 压缩包中的代码示例。它可能包含了一个实际的项目结构,展示了如何将定时调度任务集成到你的应用程序中。在实际开发中,你可能还需要考虑多线程、异常处理以及...

    QuartzJob分布式定时任务学习资料

    QuartzJob是一个分布式的定时任务协调器,此资源详细介绍...资源包含使用示例代码,讲义,中文和英文版的框架手册随时查阅,和TimerTask的对比,Web示例,Quartz开发指南,quartz如何动态调整时间,Quartz入门与提高

    简单的timer例子

    在压缩包中的`test08`文件可能是实现上述示例的源代码文件,通过查看这个文件,你可以更深入地理解`Timer`和`TimerTask`的使用。建议打开并分析这个文件,观察如何将理论知识应用于实际项目。 总之,这个简单的...

    用java实现跳动的小球示例代码

    本文主要介绍了用Java实现跳动的小球的示例代码,通过实例代码给大家介绍了非常详细,对大家的学习或工作具有一定的参考借鉴价值。下面将对标题、描述、标签和部分内容中涉及到的知识点进行详细说明。 一、Java基础...

    java定时器.rar

    - 示例代码文件(如`TimerExample.java`),展示了如何创建和使用`Timer`和`TimerTask`。 - 一个简单的README文件,解释了示例代码的工作原理和使用方法。 - 测试用例(如`TestTimer.java`),用来验证定时器功能的...

    timer写的一个任务测试类

    在"TaskDemo"这个文件中,可能包含了使用`Timer`和`TimerTask`实现的具体示例代码,例如定义了定时打印消息、执行数据库操作或其他业务逻辑的任务。通过查看和学习这个示例,你可以更好地理解`Timer`类的工作原理和...

Global site tag (gtag.js) - Google Analytics