Observable.timer(5, TimeUnit.SECONDS).subscribe(new Observer<Long>() {
@Override
public void onCompleted() {
LogUtils.d("------->onCompleted");
@Override
public void onError(Throwable e) {
@Override
public void onNext(Long aLong) {
timer间隔执行:间隔5秒执行
Observable.timer(0,5,TimeUnit.SECONDS).subscribe(new Subscriber<Long>() {
@Override
public void onCompleted() {
@Override
public void onError(Throwable e) {
@Override
public void onNext(Long aLong) {
LogUtils.d("------>along:"+aLong+" time:"+SystemClock.elapsedRealtime());
02-19 17:27:35.683 25563-25987/com.rxandroid.test1 D/----->: ------>along:0 time:286032978
02-19 17:27:40.683 25563-25987/com.rxandroid.test1 D/----->: ------>along:1 time:286037976
02-19 17:27:45.683 25563-25987/com.rxandroid.test1 D/----->: ------>along:2 time:286042977
02-19 17:27:50.683 25563-25987/com.rxandroid.test1 D/----->: ------>along:3 time:286047976
02-19 17:27:55.683 25563-25987/com.rxandroid.test1 D/----->: ------>along:4 time:286052976
由于这种间隔执行已经标记为过时,推荐下面的方式:interval操作符:
Observable.interval(0,5,TimeUnit.SECONDS).subscribe(new Observer<Long>() {
@Override
public void onCompleted() {
@Override
public void onError(Throwable e) {
@Override
public void onNext(Long aLong) {
LogUtils.d("------>along:"+aLong+" time:"+SystemClock.elapsedRealtime());
});
能达到同样的效果
注意timer与interval都是默认运行在一个新线程上面
public void startTime() {
Observable.timer(10, TimeUnit.SECONDS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer() {
@Over
不需要使用thread获取系统时间再通过主线程更新ui,rxJava优异的线程切换能力可以帮我们完成这一功能。自从学习了rxJava之后,发现可以很简单并且很简洁的实现时间的显示。
区别:System.currentTimeMillis()获取的是系统的时间,可以被修改。SystemClock.elapsedRealtime()获取的是系统开机到现在的时间,不能被修改。
使用:System.currentTimeMillis()用于和日期相关的地方,比如日志。SystemClock.elapsedRealtime()用于某个事件经历的时间,比如两次点击的时间间隔。
package com.fcbox.locker.shrail.utils;
import android.support.annotation.NonNull;
import com.fcbox.locker.sdk.Locker;
import com.fcbox.locker.sdk.log.
项目中需要一个获取验证码的倒计时,需要应用被杀死,再次进入能继续倒计时。如果使用系统提供的倒计时CountDownTimer,在杀死进程后,就必须重新创建对象,倒计时被清空。因此,不能使用对象来计时,记录时间的工具必须持久化的,最简单的就是使用SharedPreferences来保存。
二.方案思路
方案一:使用系统时间
保存倒计时完成的时间stopTime,每过一秒,计算一次完成时间与...
//rxjava2.x
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'io.reactivex.rxjava2:rxjava:2.1.0'
首先声明一个Disposable对象
public static Flowable<Long> interval(long period, TimeUnit unit) {
return interval(period, period, unit, Sche...
timer 功能在指定的时间间隔内反复触发指定窗口的定时器事件。语法Timer ( interval {, windowname } )参数interval:指定两次触发Timer事件之间的时间间隔,有效值在0到65之间。本文文主要为大家详细介绍了Java定时器Timer的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。定时计划任务功能在Java中主要使用的就是Timer对象,它在内部...
适合所有初中级工程师,从RxJava的每个知识点进行讲解,并在每个知识点中都带有文字说明和代码例子说明。通过这次系统化的学习,您将可以完整的学习到RxJava家族的所有特性和常用的操作符,掌握操作符的使用,掌握RxJava与Rx其他第三方库的使用。可以用三句简单的话进行概括面试加分利器 = 加大录取机会加快工作效率 = 早点下班回家系统化的学习 = 能力全面提升
Android-Rxjava 常用操作符
1.应用场景 延时执行操作 默认是子线程 可以通过observeOn 切换的是观察者的执行线程
Observable.just(1).delay(2000,TimeUnit.MILLISECONDS)
// .observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Object>() {
@Override
public void a
Observable.interval(0,1, TimeUnit.SECONDS)
.take(count + 1)
.map(new Function<Long, Long>() {
@Overri...