实现倒计时功能有很多的方法。我在项目中自己封装了一个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