Android定时器功能实现方法

在Android开发中,定时器一般有以下3种实现方法:

1、采用Handler与线程的sleep(long)方法

2、采用Handler的postDelayed(Runnable, long)方法

3、采用Handler与timer及TimerTask结合的方法

下面逐一介绍:

一、采用Handle与线程的sleep(long)方法

Handler主要用来处理接受到的消息。这只是最主要的方法,当然Handler里还有其他的方法供实现,有兴趣的可以去查API,这里不过多解释。

1、定义一个Handler类,用于处理接受到的Message。

Handler handler = new Handler() {
    public void handleMessage(Message msg) {
        // 要做的事情
        super.handleMessage(msg);
    }
};

2、新建一个实现Runnable接口的线程类,如下:

public class MyThread implements Runnable {
    @Override
    public void run() {
        // TODO Auto-generated method stub
        while (true) {
            try {
                Thread.sleep(10000);// 线程暂停10秒,单位毫秒
                Message message = new Message();
                message.what = 1;
                handler.sendMessage(message);// 发送消息
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

3、在需要启动线程的地方加入下面语句:

new Thread(new MyThread()).start();

4、启动线程后,线程每10s发送一次消息。

二、采用Handler的postDelayed(Runnable, long)方法

这个实现比较简单一些。

1、定义一个Handler类

Handler handler=new Handler();
Runnable runnable=new Runnable() {
    @Override
    public void run() {
        // TODO Auto-generated method stub
        //要做的事情
        handler.postDelayed(this, 2000);
    }
};

2、启动计时器

handler.postDelayed(runnable, 2000);//每两秒执行一次runnable.

3、停止计时器

handler.removeCallbacks(runnable);

三、采用Handler与timer及TimerTask结合的方法

1、定义定时器、定时器任务及Handler句柄

private final Timer timer = new Timer();
private TimerTask task;
Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        // TODO Auto-generated method stub
        // 要做的事情
        super.handleMessage(msg);
    }
};

2、初始化计时器任务

task = new TimerTask() {
    @Override
    public void run() {
        // TODO Auto-generated method stub
        Message message = new Message();
        message.what = 1;
        handler.sendMessage(message);
    }
};

3、启动定时器

timer.schedule(task, 2000, 2000);

1. 定时器任务(TimerTask)顾名思义,就是说当定时器到达指定的时间时要做的工作,这里是想Handler发送一个消息,由Handler类进行处理。

2. java.util.Timer.schedule(TimerTask task, long delay):这个方法是说,dalay/1000秒后执行task.只执行一次。

java.util.Timer.schedule(TimerTask task, long delay, long period):这个方法是说,delay/1000秒后执行task,然后进过period/1000秒再次执行task,这个用于循环任务,执行无数次,当然,你可以用timer.cancel();取消计时器的执行。

时间: 2024-08-06 07:54:49

Android定时器功能实现方法的相关文章

Android TextView实现长按复制文本功能的方法

上网查询Android开发实现长按复制文本功能的方法很多,有什么改写系统长按响应,有用EditView控件替换TextView的方法,还有自定义控件什么的,总之都比较麻烦,而且效果也不好. 其实现在新的Android开发只需要增加一行代码就可以实现这个功能,在布局文件的TextView控件属性中增加这么一句就行:android:textIsSelectable="true" 但查询资料说只有android sdk 11起才支持,v11以下则不行了.我测试了一下在Android4没问题,

Android定时器,推荐ScheduledThreadPoolExecutor

Android定时器,推荐ScheduledThreadPoolExecutor 官方网址:http://developer.android.com/reference/java/util/Timer.html 实现定时器的功能,有如下几种方法:1.Thread的sleep(long)方法2.Handler的postDelayed(Runnable, long)方法3.Timer与TimerTask结合的方法这3种方法,本质上是一样的,都跟线程相关:这里主要讲下Timer. 定时器可以有个名称(

Android倒计时功能的实现(CountDownTimer)

以前编程的时候,遇到倒计时的功能时,经常自己去写,但其实Android已经帮封装好了一个倒计时类CountDownTimer,其实是将后台线程的创建和Handler队列封装成为了一个方便的类调用. 说明: CountDownTimer timer = new CountDownTimer(30000, 1000)中,第一个参数表示总时间,第二个参数表示间隔时间. 意思就是每隔一秒会回调一次方法onTick,然后30秒之后会回调onFinish方法. package com.androidcoun

Android的GPS获取方法

Android的GPS获取方法 其实这是一个伪命题:因为我不是要说android的gps获取实现,或者说底层具体实现:而是我直接使用了百度地图的sdk,在其中直接获取到gps信息,以前有做过这个功能,今天就直接将demo介绍一下以利大家. 第一步:获取sdk 在百度地图的开发者官网上直接就可以下载到线程的demo:当然功能相对是齐全的,基本解决需要地图的各种功能了.http://developer.baidu.com/map/index.php?title=androidsdk 第二步,获取ke

Android基类设计方法详解

1 为什么要设计基类 为什么要给程序设计基类呢?主要是出于2个原因,一是方便代码编写,减少重复代码和冗余逻辑,优化代码:二是优化程序架构,降低耦合度,方便拓展.修改. ok,编写代码是程序员的第一步,那么第二步就是要编写高质量的代码,代码能实现功能是一方面,写的优美则是另一方面,这也是我们所有攻城狮们应该追求的境界. 2 设计基类的基本思路 那么,哪些东西我们需要抽象到基类中呢? 2.1 重复的代码:如果一个逻辑是大多数子类都需要使用的 2.2 臭而长的代码:典型的findviewbyid.To

Android定时器,更新数据

做个笔记,Android中常用的定时器,用于定时更新ui数据等. 1.Handler + Runnable定时器 private Handler mHandler; private Runnable mRunnable; mHandler = new Handler(); mRunnable = new Runnable() { public void run () { //更新数据的方法 update(); } }; //定时启动线程(执行的线程,时间毫秒) mHandler.postDela

实例介绍 Java(android) 回调函数使用方法

在Android开发中经常用到回调机制,其中最典型的就是控件被触发的实现方式,简单而言,如Button被Click后,是系统调用了OnClick方法,而我们为Button注册了OnClickListener监听器,当被触发Click后,OnClickListener中的OnClick方法就会被回调,我们就能在其中执行相应操作了. 下面举一个简单的例子介绍回调的实现方式: 回调函数使用的简单例子 程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序.程序员B要让a调用自己的程序

QtAndroid详解(3):startActivity实战Android拍照功能

在"QtAndroid详解(1):QAndroidJniObject"中,我们介绍了 QAndroidJniObject 这个 Qt JNI 的核心类,在""中我们介绍了 startActivity 以及与它配套的一些 Android 背景知识,这次我们来看一个实例,演示如何使用 startActivity 来调用 Android 系统功能,同时也演示 QAndroidJniObject 的常见用法. 实例介绍 先看下实例效果,然后再论. 我们只是演示 API 用法

Delphi xe7 up1 调用android振动功能

Delphi xe7 up1 调用android振动功能 振动用到以下4个单元: Androidapi.JNI.App,Androidapi.JNIBridge,Androidapi.JNI.Os,Androidapi.Helpers 使用方法: var LVibrator: JVibrator; begin LVibrator := TJVibrator.Wrap ((SharedActivity.getSystemService(TJActivity.JavaClass.VIBRATOR_S