zoukankan      html  css  js  c++  java
  • Android中的定时器

    在android中,经常用到的定时器主要有以下几种实现:
    一、采用Handler与线程的sleep(long )方法
    二、采用Handler的postDelayed(Runnable, long) 方法
    三、采用Handler与timer及TimerTask结合的方法。

    下面逐一介绍:

    一、采用Handle与线程的sleep(long )方法
    Handler主要用来处理接受到的消息。这只是最主要的方法,当然Handler里还有其他的方法供实现,有兴趣的可以去查API,这里不过多解释。
    1.定义一个Handler类,用于处理接受到的Message.

    1. Handler handler = new Handler() {
    2. public void handleMessage(Message msg) {
    3. //要做的事情
    4. super.handleMessage(msg);
    5. }
    6. };
    复制代码
    2.新建一个实现Runnable接口的线程类。如下:

    1. public class MyThread implements Runnable{
    2. @Override
    3. public void run() {
    4. // TODO Auto-generated method stub
    5. while (true) {
    6. try {
    7. Thread.sleep(10000);//线程暂停10秒,单位毫秒
    8. Message message=new Message();
    9. message.what=1;
    10. handler.sendMessage(message);//发送消息
    11. } catch (InterruptedException e) {
    12. // TODO Auto-generated catch block
    13. e.printStackTrace();
    14. }
    15. }
    16. }
    17. }
    复制代码
    3.在需要启动线程的地方加入下面语句:

    1. new Thread(new MyThread()).start();
    复制代码
    4.启动线程后,线程每10s发送一次消息。
    二、采用Handler的postDelayed(Runnable, long) 方法
    这个实现比较简单一些:
    1.

    1. Handler handler=new Handler();
    2. Runnable runnable=new Runnable(){
    3. @Override
    4. public void run() {
    5. // TODO Auto-generated method stub
    6. //要做的事情
    7. handler.postDelayed(this, 2000);
    8. }
    9. };
    复制代码
    2.启动计时器:

    1. handler.postDelayed(runnable, 2000);//每两秒执行一次runnable.
    复制代码
    3.停止计时器:

    1. handler.removeCallbacks(runnable);
    复制代码
    三、采用Handler与timer及TimerTask结合的方法。
    1.定义定时器、定时器任务及Handler句柄

    1. private final Timer timer = new Timer();
    2. private TimerTask task;
    3. Handler handler = new Handler() {
    4. @Override
    5. public void handleMessage(Message msg) {
    6. // TODO Auto-generated method stub
    7. //要做的事情
    8. super.handleMessage(msg);
    9. }
    10. };
    复制代码
    2.初始化计时器任务。

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

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

    取自:http://blog.csdn.net/t80t90s/article/details/7953855
  • 相关阅读:
    vscode终端无法使用webpack命令
    vscode 常用配置
    git中fatal: Authentication failed的问题
    vue项目初始化步骤
    Windwos安装Node.js和npm的详细步骤
    node安装教程,全局安装vue,webpack/cli,创建一个vue项目(详细步骤)
    VsCode 自动生成文件头部注释和函数注释
    微信小程序使用字体图标
    微信小程序第三方框架
    查看最近访问的文件目录或文件
  • 原文地址:https://www.cnblogs.com/jackrex/p/3001228.html
Copyright © 2011-2022 走看看