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

时间: 2024-08-28 03:00:49

Android中定时器的3种实现方法的相关文章

【转】Android中定时器的3种实现方法

原文网址:http://www.android-study.com/pingtaikaifa/508.html 在Android开发中,定时器一般有以下3种实现方法: 一.采用Handler与线程的sleep(long)方法二.采用Handler的postDelayed(Runnable, long)方法三.采用Handler与timer及TimerTask结合的方法 下面逐一介绍: 一.采用Handle与线程的sleep(long)方法 Handler主要用来处理接受到的消息.这只是最主要的方

Android中常用的三种存储方法浅析

Android中常用的三种存储方法浅析 Android中数据存储有5种方式: [1]使用SharedPreferences存储数据 [2]文件存储数据 [3]SQLite数据库存储数据 [4]使用ContentProvider存储数据 [5]网络存储数据 在这里我只总结了三种我用到过的或即将可能用到的三种存储方法. 一.使用SharedPreferences存储数据 SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置信息比如窗口状态,它的本质是基

Android中定时执行任务的3种实现方法

在Android开发中,定时执行任务的3种实现方法: 一.采用Handler与线程的sleep(long)方法(不建议使用,java的实现方式)二.采用Handler的postDelayed(Runnable, long)方法(最简单的android实现)三.采用Handler与timer及TimerTask结合的方法(比较多的任务时建议使用) 下面逐一介绍: 一.采用Handle与线程的sleep(long)方法 Handler主要用来处理接受到的消息.这只是最主要的方法,当然Handler里

Android中Button的五种监听事件

简单聊一下Android中Button的五种监听事件: 1.在布局文件中为button添加onClick属性,Activity实现其方法2.匿名内部类作为事件监听器类3.内部类作为监听器4.Activity本身作为事件监听器,实现onClickListener5.外部类作为监听器 ButtonListenerActivity.class public class ButtonListenerActivity extends AppCompatActivity implements View.On

Android 中对于图片的内存优化方法

Android 中对于图片的内存优化方法,需要的朋友可以参考一下 1. 对图片本身进行操作 尽量不要使用 setImageBitmap.setImageResource. BitmapFactory.decodeResource 来设置一张大图,因为这些方法在完成 decode 后,最终都是通过 Java 层的 createBitmap 来完成的,需要消耗更多内存.因此,改用先通过 BitmapFactory.decodeStream 方法,创建出一个 bitmap,再将其设为 ImageVie

Android中使用代码截图的各种方法总结

1,基于Android SDK的截屏方法 (1)主要就是利用SDK提供的View.getDrawingCache()方法.网上已经有很多的实例了.首先创建一个android project,然后进行Layout,画一个按键(res/layout/main.xml): <?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android

Android中Activity的4种状态

Android中Activity的四种状态: 1)Active/Runing: 一个新 Activity 启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态. 2)Paused:当 Activity 被另一个透明或者 Dialog 样式的 Activity 覆盖时的状态.此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但它已经失去了焦点故不可与用户交互. 3)Stoped :当 Activity 被另外一个 Activity 覆盖.失去焦点

Jquery中each的三种遍历方法

Jquery中each的三种遍历方法 $.post("urladdr", { "data" : "data" }, function(data) { $.each(data, function(n,value) { });}); 1.选择器+遍历 $('div').each(function (i){ i就是索引值 this 表示获取遍历每一个dom对象 }); 2.选择器+遍历 $('div').each(function (index,dom

【转】Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)

原文网址:http://www.blogjava.net/anchor110/articles/355699.html 1.在工程下新建lib文件夹,将需要的第三方包拷贝进来.2.将引用的第三方包,添加进工作的build path.3.(关键的一步)将lib设为源文件夹.如果不设置,则程序编译可以通过,但运行的时候,会报: java.lang.NoClassDefFoundError # re: Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundErro