zoukankan      html  css  js  c++  java
  • Android中定时器的3种实现方法

    原文:http://blog.csdn.net/wulianghuan/article/details/8507221

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

    一、采用Handler与线程的sleep(long)方法
    二、采用Handler的postDelayed(Runnable, long)方法
    三、采用Handler与timer及TimerTask结合的方法

    下面逐一介绍:

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

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

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

    1
    2
    3
    4
    5
    6
    Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            // 要做的事情
            super.handleMessage(msg);
        }
    };

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    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. 在需要启动线程的地方加入下面语句:

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

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

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

    这个实现比较简单一些。

    1. 定义一个Handler类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    Handler handler=new Handler();
    Runnable runnable=new Runnable() {
        @Override
        public void run() {
            // TODO Auto-generated method stub
            //要做的事情
            handler.postDelayed(this2000);
        }
    };

    2. 启动计时器

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

    3. 停止计时器

    1
    handler.removeCallbacks(runnable);

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

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    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. 初始化计时器任务

    1
    2
    3
    4
    5
    6
    7
    8
    9
    task = new TimerTask() {
        @Override
        public void run() {
            // TODO Auto-generated method stub
            Message message = new Message();
            message.what = 1;
            handler.sendMessage(message);
        }
    };

    3. 启动定时器

    1
    timer.schedule(task, 20002000);

    简要说一下上面三步提到的一些内容:

    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();取消计时器的执行。

  • 相关阅读:
    解决:Could not resolve archetype org.apache.maven.archetypes
    Spring MVC配置MyBatis输出SQL
    Spring集成MyBatis 通用Mapper以及 pagehelper分页插件
    关于SpringMVC或Struts2接受参数接收不到的原因
    配置quartz启动时就执行一次
    ajaxFileUpload进行文件上传时,总是进入error
    spring mvc注入配置文件里的属性
    java中将一个文件夹下所有的文件压缩成一个文件
    flume failed to start agent because dependencies were not found in classpath
    ubuntu不能安装pip unable to install pip in unbuntu
  • 原文地址:https://www.cnblogs.com/tc310/p/4048236.html
Copyright © 2011-2022 走看看