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

    在这篇文章中,我将继上一篇,讲解用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");
        }
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值