• Android中实现定时器的3中方法


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

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

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

    三、采用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结合的方法

          Timer是一种定时器工具,用来在一个后台线程计划执行指定任务。它可以计划执行一个任务一次或反复多次。
    TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务。

    Timer和TimerTask可以做为实现线程的第三种方式,前两中方式分别是继承自Thread类和实现Runnable接口。

            Timer是一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以调度TimerTask。TimerTask是一个抽象类,实现了Runnable接口,所以具备了多线程的能力。

    import java.util.Timer;  
    import java.util.TimerTask;  
    public class TimerTest {  	
        static class MyTimerTask1 extends TimerTask {  
    	public void run() {  
    	       System.out.println("爆炸!!!");  
    	        }  
    	 }     
                    public static void main(String[] args) {  
    	        Timer timer = new Timer();  
    	        timer.schedule(new MyTimerTask1(), 5000);// 5秒后启动任务  
    	 }  
    }  
    	
    

     schedule是Timer调度任务的方法,Timer重构了四个schedule方法,具体可以查看JDK API。

  • 相关阅读:
    项目太多工作环境互相干扰?virtualenv 一招教你轻松解决。
    安装的 Python 版本太多互相干扰?pyenv 建议了解一下。
    Python 拓展之详解深拷贝和浅拷贝
    Python 操作 SQLite 数据库
    IQueryable接口与IEnumberable接口的区别
    Resharper的配置(习惯使用了VS的F6编译和F12(快速非resharper查询编译代码)转到定义的默认设置)【设置了好多次resharper的使用了,特此记下简单的思路】
    程序人生,人生程序。(面向对象的奇葩理解)
    SQL表连接查询(inner join、full join、left join、right join)
    MYSQL中存储过程的创建,调用及语法
    mysql存储过程详解
  • 原文地址:https://www.cnblogs.com/summers/p/4039466.html
Copyright © 2020-2023  润新知