Android Handler post postDelayed postAtTime 简单说明及使用

来源:互联网 发布:python 硬件自动化测试 编辑:程序博客网 时间:2024/06/05 22:31

Android.os.Handler是android SDK中处理定时操作的核心类。通过Handler类,可以提交和处理一个Runnable对象。这个对象的run方法可以立刻执行,也可以在指定时间后执行(也可称为预约执行)。
Handler类主要可以使用如下3个方法来设置执行Runnable对象的时间:

// 立即执行Runnable对象    public final boolean post(Runnable r);    // 在指定的时间(uptimeMillis)执行Runnable对象    public final boolean postAtTime(Runnable r, long uptimeMillis);    // 在指定的时间间隔(delayMillis)执行Runnable对象    public final boolean postDelayed(Runnable r, long delayMillis);  

从上面3个方法可以看出,第1个参数的类型都是Runnable,因此,在调用这3个方法之前,需要有一个实现Runnable接口的类,Runnable接口的代码如下:

public interface Runnable {        public void run();          //  线程要执行的方法    } 

在Runnable接口中只有一个run方法,该方法为线程执行方法。可以使用如下代码指定在5秒后调用run方法:

Handler handler = new Handler();    handler.postDelayed(this, 5000);   

如果想在5秒内停止计时,可以使用如下代码:

handler.removeCallbacks(this); 

除此之外,还可以使用postAtTime方法指定未来的某一个精确时间来执行Runnable对象,代码如下:

Handler handler = new Handler();    // 在15秒后执行Runnable对象   handler.postAtTime(new RunToast(this){  }, android.os.SystemClock.uptimeMillis() + 15 * 1000); 

其中RunToast是一个实现Runnable接口的类,代码如下:

class RunToast implements Runnable {        private Context context;        public RunToast(Context context)  {            this.context = context;        }        @Override        public void run()  {            Toast.makeText(context, "15秒后显示Toast提示信息", Toast.LENGTH_LONG).show();        }    }   

postAtTime的第2个参数表示一个精确时间的毫秒数,如果从当前时间算起,需要使用android.os.SystemClock.uptimeMillis()获得基准时间。
要注意的是,不管使用哪个方法来执行Runnable对象,都只能运行一次。如果想循环执行,必须在执行完后再次调用post、postAtTime或postDelayed方法。例如,在Main类的run方法中再次调用了postDelayed方法,代码如下:

public void run() {        tvCount.setText("Count:" + String.valueOf(++count));        //  再次调用postDelayed方法,5秒后run方法仍被调用,然后再一次调用postDelayed方法,这样就形成了        //  循环调用        handler.postDelayed(this, 5000);    }   

运行本例后,单击【开始计数】按钮,5秒后,会在按钮上方显示计数信息。然后单击【15秒后显示Toast信息框】按钮,过15秒后,会显示一个Toast信息框,如图所示。

这里写图片描述


原文地址:
http://book.51cto.com/art/201006/207064.htm


阅读全文
0 0
原创粉丝点击