/**
* @param millisInFuture The number of millis in the future from the call
* to {@link #start()} until the countdown is done and {@link #onFinish()}
* is called.
* @param countDownInterval The interval along the way to receive
* {@link #onTick(long)} callbacks.
*/
public CountDownTimer(long millisInFuture, long countDownInterval) {
mMillisInFuture = millisInFuture;
mCountdownInterval = countDownInterval;
}
/**
* Callback fired on regular interval.
* @param millisUntilFinished The amount of time until finished.
*/
public abstract void onTick(long millisUntilFinished);
/**
* Callback fired when the time is up.
*/
public abstract void onFinish();
刚好做过,把思路和源码发给你,说错了别介意,emm
首先定义一个变量times,这个是时间
按下按钮后给times设置30s倒计时,同时给自定义handler发一个消息
handler里面使用弱引用去引用Fragment或者activity,这样能消除handler的内存泄漏
判断what做出回应,首先把times自减一次,然后在handler内部重新发一次消息,这样handler就会一直执行下去,直到times被自减为0,还有一个重要的地方,就是发消息的时候记得延迟1000ms
https://www.sunofbeach.net/a/1253986602389155840
实现倒计时的方式还是挺多的。你能想到的有哪些呢?自己开线程+handler?这个也可能,但是得管理起来,麻烦。
那用CountDownTimer吧,这个也可以。
怎么用呢?
我随便解释一下吧。自己去写。
构造方法有两个参数
第一个是总时长,第二个是间隔。比如说,第一个是60000,第二个是1000,那就是总时长为60秒的倒计时,间隔为1秒。
那怎么通知你在倒计时和结束呢?
这个是抽象类,你继承它,就得覆写这两个方法
一个是在变化,比如说60000,59000,58000....
一个是结束,你稍微打个log就知道。
如何开始?直接调用start方法。它的内部实现也是借助Handler。如果你要取消,调用cancel即可。
你也可以用Timer实现倒计时。