TimerTask代码示例[学习]
来源:互联网 发布:c语言数组生命 编辑:程序博客网 时间:2024/06/06 00:57
TimerTask代码示例[学习]
- 博客分类:
- Android
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代码示例[学习]
- Android TimerTask代码示例[学习]
- Timer和TimerTask 示例
- Timer,TimerTask 学习
- linux驱动学习示例代码
- Android学习笔记【示例代码】
- webservice学习代码示例(1)
- OSG学习:阴影代码示例
- Timer和TimerTask 示例[转]
- Timer和TimerTask使用完整示例
- Android Java Timer & TimerTask 学习
- Timer 和TimerTask 学习总结
- JAVA定时器 (Timer TimerTask)学习
- TimerTask
- TimerTask
- TimerTask
- TimerTask
- ASP.NET学习--N层代码示例
- 企业应用业务需求变化的分析与应对-常见的业务需求变化
- autoload 自动加载模型 | 函数 | 类
- 算法温故知新之排序
- android 设置状态栏
- 用prctl定制你的线程
- TimerTask代码示例[学习]
- windows server 2003 负载平衡的详细设置步骤
- http://www.cnblogs.com/yzhxhwt/archive/2009/11/02/1594855.html
- 关于Profile问题
- ubuntu-Apache2: Could not reliably determine the server’s fully qualified domain name
- Unix网络编程代码 第20章 广播
- Android四种Activity的加载模式
- linux增加自己的模块
- Android的七巧板Activity之二 Activity的加载模式