您的位置:首页 > 移动开发 > Android开发

Android中Handler的使用方法——构建定时器

2010-06-19 14:27 561 查看
    在这篇文章中,我将继上一篇,讲解用Handler来构建最简单的周期性触发的定时器,您可以加以修改,构建更为复杂的定时器。
   ◆ 在代码中定义一个整形常量,代表消息的ID。此处不妨对其取名为TIMERID。  
   ◆创建自己的Handler,在该Handler中HandlerMessage处理函数中。在消息处理函数中,我们首先发送消息TIMERID,并指定其延迟的时间,单位为毫秒。然后可以调用相应的事务处理函数。需要注意的是,如果事件处理函数花费的时间过长,则下次消息到来时,会导致不能及时处理。
   ◆创建startTimer函数,在该函数中触发定时器,实际上就是发送一个TIMERID消息,来第一次触发消息。
   ◆创建stopTimer函数,在该函数中停止定时器,实际上就是把TIMERID的消息从消息队列中删除即可。
    下面让我们来以代码作为说明。
package com.android.mytimer;
import android.os.Handler;
import android.os.Message;
public class MyTimer extends Handler
{
        private static int TIMERID = 0; //静态变量,保证ID唯一。当ID超过整形最大值时,应该把它恢复为0
        private final int mInterval;
        public interface CallBack{
            void timerCallBack();
        }

        private CallBack mCallBack;
        public MyTimer(int interval, CallBack callback)
        {
            mInterval = interval;
            mCallBack = callback;
            TIMERID++;
        }

        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            super.handleMessage(msg);
            if( msg.what == TIMERID)
            {
                Message message = obtainMessage(TIMERID);
                this.sendMessageDelayed(message, mInterval);
                //for speed up, NO NULL Pointer exception check
                mCallBack.timerCallBack();
            }
        }
        public void startTimer()
        {
            Message msg = this.obtainMessage(TIMERID);
            this.sendMessage(msg);
        }

        public void stopTimer()
        {
            this.removeMessages(TIMERID);
        }
}
其中接口CallBack是一个回调函数,使用这个定时器的应用必须实现该接口,并且在构造函数当中传入该类。如下
    public class TestTimer implement MyTImer.CallBack
    {
        MyTimer mTimer;
        public TestTimer()
        {
            mTimer = new MyTImer(10, this);
            mTimer.start();
        }
        void timerCallBack();
        {
            Log.i("TestTimer", "this is the timerCallBack");
        }
    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: