android 倒计时的几种实现方式
1.Handler
mTime.setText(times + "s");
Message obtain = Message.obtain();
obtain.what = 99;
handler.sendMessageDelayed(obtain, 1000);
int times = 5;
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 99:
times--;
mTime.setText(times + "s");
if (times <= 0) {
startActivity(new Intent(MainActivity.this, Main2Activity.class));
return;
} else {
Message obtain = Message.obtain();
obtain.what = 99;
handler.sendMessageDelayed(obtain, 1000);
}
break;
}
}
};
2.TimerTask
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
Log.d(TAG, "run: "+(Looper.myLooper()==Looper.getMainLooper()));
runOnUiThread(new Runnable() {
@Override
public void run() {
mTime.setText(times + "s");
times--;
if (times==0){
}
}
});
}
},0,1000);
3.CountDownTimer
new CountDownTimer(5000,1000){
@Override
public void onTick(long millisUntilFinished) {
Log.d(TAG, "onTick: "+millisUntilFinished);
}
@Override
public void onFinish() {
Log.d(TAG, "onFinish: ");
}
}.start();
4.Rxjava
/**
* 第一个参数:初次延时
* 第二个参数:周期
* 第三个参数:时间单位
*/
Observable.interval(1, 1, TimeUnit.SECONDS)
.take(4)
.subscribe(new Observer<Long>() {
@Override
public void onSubscribe(Disposable d) {
Log.d(TAG, "onSubscribe: ");
}
@Override
public void onNext(Long aLong) {
Log.d(TAG, "onNext: " + aLong);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});