handler实现倒计时功能

本文介绍了如何使用Handler实现倒计时功能,强调了在倒计时结束后关闭Handler以避免内存浪费和潜在的问题。作者分享了倒计时工具类的设计思路,包括手动控制、从小时开始的倒计时、时间结束时的通知以及过程中时间数据的变化。文章还提到了通过接口回调来处理时间数据的变化。
摘要由CSDN通过智能技术生成

实现倒计时功能有很多的方法。我在项目中自己封装了一个handler的倒计时方法。功能:实现倒计时功能。在倒计时结束的时候将关闭handler。比较其在后台继续运行浪费内存。以及在页面重新打开的时候造成脏数据和内存泄露。

下面是倒计时工具类:

/**
 * Created by Administrator on 2017/2/16.
 * 抽取出来的倒计时工具类
 */
public class CountDownUtil2 {
    private final static int SECOND = 0;
    private final static int MINUS = 1;
    private final static int HORE = 2;
    //TODO 我这个地方使用的是用textview显示的文本
    private TextView mTvTime;

    private static Handler mHandler = new Handler(new Handler.Callback() {

        private int mHour;
        private int mMinus;
        Bundle data = null;
        int second;

        @Override
        public boolean handleMessage(Message msg) {

            //TODO 根据what判断是那个传递过来的数据
            //TODO 分为小时类型.分钟类型.秒类型
            /**
             * 如果是小时类型需要判断当前的小时是否为小于0等于0也在内
             * 如果小于0的话就使用分钟的,同理如果分钟的小于等于0的话就调用秒的
             */
            switch (msg.what) {
                case SECOND://秒
                    data = msg.getData();
                    second = (int) data.get("second");
                    //再次执行倒计时操作
                    selectTime(mActivity, second);
                    break;
                case MINUS:
                    data = msg.getData();
                    second = data.getInt("second");
                    mMinus = data.getInt("minus");
                    //判断当前的分钟是否为0
                    if (mMinus == 0) {
 //调用秒的方法
                        selectTime(mActivity, second);
                        mHandler.removeCallbacks(minusRun);//移除分钟轮询
                    } else {
 //掉用分钟的方法
                        selectTime(mActivity, mMinus, second);
                    }
                    break;
                case HORE:
                    data = msg.getData();
                    second = data.getInt("second");
                    mMinus = data.getInt("minus");
                    mHour = data.getInt("hour");
                    if (mHour == 0) {
                        selectTime(mActivity, mMinus, second);
                        //移除小时轮询
                        mHandler.removeCallbacks(hourRun);
                    } else {
                        selectTime(mActivity, mHour, mMinus, second);
                    }
                    break;
            }
            return false;
        }
    });
    private static int mCurrentSecond;
    private static int mCurrentMinus;
    private static int mCurrentHour;

    //构造函数将显示文本的view传递过来
    private static Activity mActivity;

    //倒计时首先需要规定倒计时的事件,包含时分秒
    public static void selectTime(Activity mActivity, int hour, int minus, int second) {
        CountDownUtil2.mActivity = mActivity;
        mCurrentHour = hour;
        mCurrentMinus = minus;
        mCurrentSecond = second;
        if (mCurrentMinus < 0 || mCurrentSecond < 0 || mCurrentMinus > 60 ||
                mCurrentSecond 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值