RxJava/RxAndroid:timer(long delay, TimeUnit unit)
timer起到定时器的作用,本例使用timer延迟3秒执行一个输出任务:
package com.example.fly.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.observers.DisposableObserver;
import io.reactivex.schedulers.Schedulers;
public class MainActivity extends AppCompatActivity {
private final String TAG = "输出";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, "" + System.currentTimeMillis());
Observable.timer(3, TimeUnit.SECONDS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(mDisposableObserver);
}
private DisposableObserver<Long> mDisposableObserver = new DisposableObserver<Long>() {
@Override
public void onNext(Long aLong) {
Log.d(TAG, "onNext:" + aLong);
Log.d(TAG, "" + System.currentTimeMillis());
}
@Override
public void onComplete() {
Log.d(TAG, "onComplete");
}
@Override
public void onError(Throwable e) {
Log.e(TAG, e.toString(), e);
}
};
}
输出:
02-08 14:13:14.582 18410-18410/com.example.fly.myapplication D/输出: 1518070394582
02-08 14:13:17.661 18410-18410/com.example.fly.myapplication D/输出: onNext:0
02-08 14:13:17.661 18410-18410/com.example.fly.myapplication D/输出: 1518070397661
02-08 14:13:17.661 18410-18410/com.example.fly.myapplication D/输出: onComplete
注意到第一次打印系统时间是:02-08 14:13:14
第二次打印出来的时间是:02-08 14:13:17。即延迟3秒。
timer不是周期性的执行任务,只是定时在某一个时间点发射一个事件,这和操作符interval周期性执行任务不同。