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对象,增加系统开销。
分享到:
相关推荐
利用jdk中的timer和timertask来实现,每天定时执行的任务。
Timer和TimerTask的使用 关于java函数中timer类的相关代码 和使用
Android Timer TimerTask Handler 三者结合实现 数据更新与View更新的同步。 一个不错的机制。
今天讲下如何定时执行后台任务。 当然还是那句话,方法有好几种,这里就讲下我认为最好用的。...主要使用到TimerTask和Service,相信大家都接触过,大家可以看下TimerTask的源码。这里是一个简单的TimerTaskDemo。
Android中使用定时器TimerTask类介绍.txt Android中使用定时器TimerTask类介绍.txt
NULL 博文链接:https://chenhua-1984.iteye.com/blog/374683
通过java的TimerTask与Timer设计时间监控,写了一个测试类,帮助新人学习。
用Handler和Timertask实现一个简单的定时器,一个简单的demo
下面是一个在Android中使用定时器Timer和TimerTask的启动,停止,暂停,继续等操作的demo。 需要注意的问题主要有两点: 1、Timer和TimerTask在调用cancel()取消后不能再执行 schedule语句 2、只能在UI主线程中更新...
博客附属代码http://blog.csdn.net/nacl025/article/details/46892481
Java中的Timer和TimerTask简介(附完整代码实例)。 在Java中,Timer和TimerTask是两个经常用来实现定时器的类。这两个类使用起来非常方便,可以完成我们对定时器的绝大多数需求。 Timer是一种定时器工具,用来在一...
spring + jdk TimerTask定时器 完整可运行
Timer与TimerTask(计时器)
本文档主要讲述的是Java中的Timer和TimerTask的使用;Timer是一个定时器类,通过该类可以为指定的定时任务进行配置。TimerTask类是一个定时任务类,该类实现了Runnable接口,而且是一个抽象类。希望本文档会给有需要...
timerTask实现每天定时一段时间内执行定时任务,这个是自己写的代码,有些和我的项目有关,可以删掉,但是其主要的都在里面,我写了注释。
spring 定时器 内含TimerTask实现和Quartz实现两种方式
在控件上动态显示内容,这里使用的是TextView,其他控件可以使用相同的方法。
一个不错的android入门实例源码,亲测可用
利用jdk中的timer和timertask来实现,每天定时执行的任务。 简单的一个demo,可以下载参考学习一下。
这是一个自动创建文件夹的定时任务,并且使用java代码直接操纵svn上传,无需手动操纵svn。内容仅供大家参考学习,本人不是高手,若有不足之处请大家见谅,并请大家提出宝贵意见,谢谢!