RxJava 2.x実装タイマーの実例コード
前言
今はネットワーク層がRxJava 2.xにアップグレードされましたので、調整が必要です。RxJava 1.xとRxJava 2.xは同じRxJavaシリーズに属していますが、RxJava 2.xの部分コードの書き換えのため、RxJava 2.xとRxJava 1.xはすでに2つの異なるバージョンになりました。RxJava 2.xは性能的に優れています。特にバックプレッシャーサポートに優れています。もちろん、このテーマはRxバージョンの違いではなく、興味のある学生は自分で研究してもいいです。もちろん、2.xの1.xの違いの一つは、Subscription mSubscription、Observable.create()などの方法もSubscriptionペアには戻らない。代わりに、new Observer()の方法で一つ多く戻る。
onSubscribe(@nonNull Dispsable disposable)の方法は、Dispsable disposableは即時に私達が購読をキャンセルして使う対象をキャンセルする方法があります。
isDiscposed():購読がキャンセルされたかどうかを判断する。
これらの敷物があったら、本題に入ります。
第一歩は、RxJava 2.x依存パケットを導入する。
コールの繰り返し実行方法であれば、activityのondestroy方法で購読をキャンセルする必要があります。
今はネットワーク層がRxJava 2.xにアップグレードされましたので、調整が必要です。RxJava 1.xとRxJava 2.xは同じRxJavaシリーズに属していますが、RxJava 2.xの部分コードの書き換えのため、RxJava 2.xとRxJava 1.xはすでに2つの異なるバージョンになりました。RxJava 2.xは性能的に優れています。特にバックプレッシャーサポートに優れています。もちろん、このテーマはRxバージョンの違いではなく、興味のある学生は自分で研究してもいいです。もちろん、2.xの1.xの違いの一つは、Subscription mSubscription、Observable.create()などの方法もSubscriptionペアには戻らない。代わりに、new Observer()の方法で一つ多く戻る。
onSubscribe(@nonNull Dispsable disposable)の方法は、Dispsable disposableは即時に私達が購読をキャンセルして使う対象をキャンセルする方法があります。
package io.reactivex.disposables;
/**
* Represents a disposable resource.
*/
public interface Disposable {
/**
* Dispose the resource, the operation should be idempotent.
*/
void dispose();
/**
* Returns true if this resource has been disposed.
* @return true if this resource has been disposed
*/
boolean isDisposed();
}
dispose():購読をキャンセルします。isDiscposed():購読がキャンセルされたかどうかを判断する。
これらの敷物があったら、本題に入ります。
第一歩は、RxJava 2.x依存パケットを導入する。
//rxjava2.x
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'io.reactivex.rxjava2:rxjava:2.1.0'
第二ステップ、直接タイマータイプRxTimerUtilコード
/**
* Instruction:Rxjava2.x
* <p>
* Author:pei
* Date: 2017/6/29
* Description:
*/
public class RxTimerUtil {
private static Disposable mDisposable;
/** milliseconds next
*
* @param milliseconds
* @param next
*/
public static void timer(long milliseconds,final IRxNext next) {
Observable.timer(milliseconds, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Long>() {
@Override
public void onSubscribe(@NonNull Disposable disposable) {
mDisposable=disposable;
}
@Override
public void onNext(@NonNull Long number) {
if(next!=null){
next.doNext(number);
}
}
@Override
public void onError(@NonNull Throwable e) {
//
cancel();
}
@Override
public void onComplete() {
//
cancel();
}
});
}
/** milliseconds next
*
* @param milliseconds
* @param next
*/
public static void interval(long milliseconds,final IRxNext next){
Observable.interval(milliseconds, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Long>() {
@Override
public void onSubscribe(@NonNull Disposable disposable) {
mDisposable=disposable;
}
@Override
public void onNext(@NonNull Long number) {
if(next!=null){
next.doNext(number);
}
}
@Override
public void onError(@NonNull Throwable e) {
}
@Override
public void onComplete() {
}
});
}
/**
*
*/
public static void cancel(){
if(mDisposable!=null&&!mDisposable.isDisposed()){
mDisposable.dispose();
LogUtil.e("==== ======");
}
}
public interface IRxNext{
void doNext(long number);
}
}
注意したいのは、もしあなたが使用しているのが時間延長で一回実行したら、timerを呼び出した後、cancelはいらないです。コードの中でもう処理しましたので、コールの繰り返し実行方法であれば、activityのondestroy方法で購読をキャンセルする必要があります。
@Override
protected void onDestroy(){
//
RxTimerUtil.cancel();
LogUtil.e("====cancel====="+ DateUtil.getNowTime());
super.onDestroy();
}
どんな簡単で乱暴ですか?はい、今日はここまでにします。皆さんの勉強に役に立つように、私達を応援してください。