Android中两种实现倒计时的方法
16lz
2021-01-23
Android中两种实现倒计时的方法
1.rxjava
public static Observable countdown(int time) {if (time < 0) time = 0;final int countTime = time;return Observable.interval(0, 1, TimeUnit.SECONDS).subscribeOn(AndroidSchedulers.mainThread()).observeOn(AndroidSchedulers.mainThread()).map(new Function() {@Overridepublic Integer apply(@NonNull Long increaseTime) throws Exception {Log.d("RxCountDown", "increaseTime.intValue():" + increaseTime.intValue());return countTime - increaseTime.intValue();}}).take(countTime + 1);}private void countdown2() {RxCountDown.countdown(120).doOnSubscribe(new Consumer() {@Overridepublic void accept(Disposable disposable) throws Exception {Log.d("MainActivity", "即时开始");startTime = System.currentTimeMillis();}}).subscribe(new Observer() {@Overridepublic void onSubscribe(@NonNull Disposable d) {Log.d("MainActivity", "记时开始");}@Overridepublic void onNext(@NonNull Integer integer) {Log.d("MainActivity", "当前时间"+integer);}@Overridepublic void onError(@NonNull Throwable e) {}@Overridepublic void onComplete() {Log.d("MainActivity", "计时结束");Log.d("MainActivity", "System.currentTimeMillis()-startTime:" + (System.currentTimeMillis() - startTime)/1000.0);}});}
2、sdk25中的CountDownTimer
private void countDown() {mStartTime = System.currentTimeMillis();index = 120;new CountDownTimer(120*1000,1000){@Overridepublic void onTick(long millisUntilFinished) {Log.d("MainActivity", "l:" + Math.round((millisUntilFinished/1000.0)));Log.d("MainActivity", "index:" + (index--));}@Overridepublic void onFinish() {Log.d("MainActivity", "index:" + 0);long endTime = System.currentTimeMillis();Log.d("MainActivity", "endTime-mStartTime:" + (endTime - mStartTime)/1000.0);}}.start();}
以上两种倒计时的时间差都是毫秒级的,区别在于第二种不能取到最后一秒的,这个在onFinish处理就好
项目地址
更多相关文章
- Android Studio执行Java类的main方法及解决方法
- Android 延迟执行方法
- android 五种Toast显示方法
- 关于AlertDialog中EditText不能弹出输入法解决方法
- android实现圆角矩形背景的方法
- Android RadioButton【单选按钮】的点击事件的两种方法
- android 跳转到系统相关应用的方法
- android屏幕信息获取的两种方法
- Android中new Notification创建实例的最佳方法