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"提供的例子应该包含了上述的代码框架,你可以下载后进行查看和学习,以便更好地理解和应用`Timer`和`TimerTask`。通过这个基础,你可以创建更复杂的定时任务,比如根据不同的时间间隔或事件...
在本项目中,`TimerTask`被用来自动化创建文件夹,并通过Java代码直接与Subversion(SVN)进行交互,从而实现版本控制系统的自动化操作,避免了手动干预。 1. **TimerTask的使用**: - 创建一个继承自`TimerTask`...
在本话题中,我们将深入学习如何在Spring2框架下利用`TimerTask`实现定时任务,以及在MyEclipse开发环境中,如何与Tomcat服务器配合使用。 【描述】:基于MyEclipse的集成开发环境,我们可以构建Java Web项目,并...
本资源提供的示例就是利用`TimerTask`和`Handler`来实现这样的功能。`TimerTask`是Java中的一个定时任务类,而`Handler`则是Android消息处理机制的核心组件,它们的结合使用可以有效地在Android应用中实现定时操作。...
这个压缩包包含了一系列的Java学习示例,每个示例都带有详细注释,有助于理解Java的核心概念。 1. **基本语法**:Java的基本语法包括变量声明、数据类型、运算符、流程控制语句(如if-else,for,while,switch-...
在安卓平台上,开发一款集天气、日历和时间选择以及倒计时功能的应用,常常需要对时间进行精确的控制。这个压缩包中的内容似乎提供了一些关于...开发者可以根据自己的需求,结合这些代码示例来学习和实现相应的功能。
总结来说,这些代码示例涵盖了使用`Timer`和`ScheduledExecutorService`两种不同方式来实现Java定时任务,以及可能的自定义任务监听器`TaskListener`。通过学习和理解这些代码,开发者可以更好地理解和应用Java的...
本文将深入探讨这两个主题,并结合实际的代码示例进行讲解。 首先,我们来理解Java多线程。多线程允许一个程序同时执行多个任务,这在处理大量并发操作时非常有用。在Java中,可以通过以下方式创建线程: 1. 继承`...
- 代码示例: ```java public class TimerTest extends TimerTask { @Override public void run() { // 定义具体的任务逻辑 } } ``` #### 四、代码解析 在提供的代码中,我们看到了一个简单的`TimerTest`...
在Android应用开发中,定时器(Timer)是一个非常重要的组件,它允许开发者在特定的时间间隔执行某些任务。...通过学习提供的源代码,可以深化对定时器实际应用的理解,为今后的开发工作打下坚实的基础。
总的来说,这个代码示例是一个综合性的Java编程练习,涵盖了定时器、图形绘制、随机数生成以及线程同步等多个知识点,对于学习和理解Java的这些特性非常有帮助。通过分析和运行这个示例,开发者可以更深入地掌握Java...
`TimerDemo.tar.gz`中的示例项目应该包含了如何在Android应用中使用这两个类的实例代码。下面将详细讲解`Timer`和`TimerTask`的工作原理以及在Android环境下的使用方法。 `Timer`类是Java中的一个调度工具,它可以...
在提供的压缩包文件“prj_quart”中,我们可以预期找到与Spring 2.0定时任务相关的代码示例、配置文件或教程文档。这些资源可以帮助读者深入理解如何在Spring 2.0中配置和使用Quartz,以及如何编写和调度定时任务。...
以下是一个简单的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是一个分布式的定时任务协调器,此资源详细介绍...资源包含使用示例代码,讲义,中文和英文版的框架手册随时查阅,和TimerTask的对比,Web示例,Quartz开发指南,quartz如何动态调整时间,Quartz入门与提高
在压缩包中的`test08`文件可能是实现上述示例的源代码文件,通过查看这个文件,你可以更深入地理解`Timer`和`TimerTask`的使用。建议打开并分析这个文件,观察如何将理论知识应用于实际项目。 总之,这个简单的...
本文主要介绍了用Java实现跳动的小球的示例代码,通过实例代码给大家介绍了非常详细,对大家的学习或工作具有一定的参考借鉴价值。下面将对标题、描述、标签和部分内容中涉及到的知识点进行详细说明。 一、Java基础...
- 示例代码文件(如`TimerExample.java`),展示了如何创建和使用`Timer`和`TimerTask`。 - 一个简单的README文件,解释了示例代码的工作原理和使用方法。 - 测试用例(如`TestTimer.java`),用来验证定时器功能的...
在"TaskDemo"这个文件中,可能包含了使用`Timer`和`TimerTask`实现的具体示例代码,例如定义了定时打印消息、执行数据库操作或其他业务逻辑的任务。通过查看和学习这个示例,你可以更好地理解`Timer`类的工作原理和...