RxJava属于观察者模式
首先定义一个订阅事件(Disposable)
private Disposable subsvcription;
实现一分钟更新一次获取时间的方法
public void getTime() {
subscription = Observable.interval(0, 1, TimeUnit.SECONDS)
.map(new Function<Long, Long>() {
@Override
public Long apply(Long aLong) throws Exception {
return aLong;
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
tvTime.setText(DateUtils.timeStamp2Date(System.currentTimeMillis(), "HH:mm"));
}
});
}
subscribeOn是事件执行的线程
observeOn是事件回调的线程
在页面关闭的时候 要取消订阅
@Override
protected void onDestroy() {
if (!subscription.isDisposed()) {
subscription.dispose();
}
super.onDestroy();
}
PS:获取时间的方法
public static String timeStamp2Date(long time, String format) {
if (format == null || format.isEmpty()) {
format = "yyyy-MM-dd HH:mm:ss";
}
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(new Date(time));
}
倒计时
public void getTimeDown(String orderID){
timeSubscription = Observable.interval(0L, 1L, TimeUnit.SECONDS, AndroidSchedulers.mainThread())
.subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
long offset = 60 * 60 * 2 - aLong;
if (offset <= 0) {
//取消
if (timeSubscription != null){
if (!timeSubscription.isDisposed()) {
timeSubscription.dispose();
}
}
}else {
//todo
}
}
});
}