この記事では、RxAndroidの使用法について学習します。
前回の調査で、Thread + RunnableとHandlerとAsyncTaskの2つのメソッドをマスターしました。理解できない場合は、前回の記事を読むことができます。
Android非同期学習(1):スレッドと実行可能
Android非同期学習(2):ハンドラーとAsyncTask
Android非同期学習(3):RxAndroid3.0の予備調査
RxJava
では、RxJavaとは何ですか?
GitHubの説明は次のとおりです。
RxJava – JVMのリアクティブ拡張– JavaVMの監視可能なシーケンスを使用して非同期およびイベントベースのプログラムを作成するためのライブラリ。
監視可能なシーケンスを使用して、JavaVM上で非同期のイベントベースのプログラムを構成するライブラリ
それは難しすぎる、翻訳は
XXX非同期ライブラリ。
RxJavaとRxAndroidの関係:RxAndroidは、AndroidのRxJavaの拡張ライブラリです。
では、他の非同期ツールに対するRxAndroidの利点は何ですか?
簡潔!特に複雑な論理では、彼は他の人と比べて十分に簡潔だからです。
オブザーバーモード
RxAndroidはオブザーバーモードを使用します。以下は、RxAndroidのオブザーバーモードを説明するために、Throwing LineGodの元の言葉を引用しています。
RxJavaには、Observable(observable)、Observer、subscribe、およびeventの4つの基本概念があります。ObservableとObserverは、subscribe()メソッドを介してサブスクリプション関係を実現するため、Observableはイベントを発行して、必要に応じてObserverに通知できます。
従来のオブザーバーモードとは異なり、RxJavaのイベントコールバックメソッドは、通常のイベントonNext()(onClick()/ onEvent()と同等)に加えて、onCompleted()とonError()の2つの特別なイベントを定義します。
onCompleted():イベントキューが終了しました。RxJavaは、各イベントを個別に処理するだけでなく、それらをキューとして扱います。RxJavaは、新しいonNext()が発行されない場合、onCompleted()メソッドを符号としてトリガーする必要があると規定しています。
onError():イベントキューが異常です。イベント処理中に例外が発生すると、onError()がトリガーされ、キューは自動的に終了し、それ以上のイベントは許可されません。
正しく実行される一連のイベントには、onCompleted()とonError()が1つだけあり、それらは一連のイベントの最後になります。onCompleted()とonError()も相互に排他的であることに注意してください。つまり、一方がキューで呼び出された場合、もう一方は呼び出されないようにする必要があります。
RxAndroidの使用
- 頼る
実装 'io.reactivex.rxjava3:rxandroid:3.0.0'
-
Observableを作成する
つまり、オブザーバーは、イベントをトリガーするタイミングとトリガーするイベントを決定します。Observableを作成する方法はたくさんありますが、基本的な作成方法は次のとおりです。
// 常用的创建方式,手动调用发送
Observable mObservable = Observable.create(new ObservableOnSubscribe() {
@Override
public void subscribe(@NonNull ObservableEmitter emitter) throws Throwable {
emitter.onNext("琴伤 - Jay");
emitter.onComplete();
}
});
// 可变参数创建,使用just创建,最多9个参数,自动调用onNext发送
Observable mObservable = Observable.just("琴伤", " - ", "Jay");
// 使用form创建,进行遍历依次发送
String [] arrString = {
"琴伤", " - ", "Jay"};
Observable mObservable = Observable.fromArray(arrString);
-
オブザーバー/サブスクライバーの作成
オブザーバー。イベントがトリガーされたときにどのような動作をするかを決定します。
サブスクライバーはオブザーバーインターフェイスの実装です。オブザーバーもサブスクライバーに変換されて使用されます。
基本的に違いはありません。違いは、サブスクライバーがonStartとunsubscribeを追加することです。これらの2つの方法は、イベントが送信される前に準備作業を行い、サブスクリプションをキャンセルするために使用されます。
Observer mObserver = new Observer<String>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public void onNext(String s) {
Toast.makeText(mContext, s, Toast.LENGTH_SHORT).show();
}
@Override
public void onError(@NonNull Throwable e) {
}
@Override
public void onComplete() {
}
};
-
申し込む
オブザーバーはオブザーバーにサブスクライブします。
mObservable.subscribe(mObserver);
作成する匿名の方法もあります
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(@NonNull ObservableEmitter<String> emitter) throws Throwable {
// 处理业务逻辑,然后onNext()传递处理结果给观察者
emitter.onNext("自导自演 - Jay");
emitter.onComplete();
}
}).subscribe(new Observer<String>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public void onNext(@NonNull String s) {
// 得到处理结果后,执行需要的操作
Toast.makeText(mContext, s, Toast.LENGTH_SHORT).show();
}
@Override
public void onError(@NonNull Throwable e) {
}
@Override
public void onComplete() {
}
});
-
指定スレッド
作成が完了したら、スレッドを指定することで、時間のかかる操作を行い、さまざまなスレッドでUIを更新できます。
mObservable.subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread());
subscribeOnは、サブスクリプションが配置されているスレッドが、時間のかかる操作を処理するためのロジックが配置されているスレッドであることを意味します。
observeOnは通知されたスレッドを表し、処理が完了した後、指定されたスレッドで通知されます。
- 退会
// 通过Disposable的dispose进行取消订阅
Disposable subscribe = Observable.just("琴伤", " - ", "Jay")
.subscribeOn(Schedulers.newThread()).subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Throwable {
Toast.makeText(mContext, s, Toast.LENGTH_SHORT).show();
}
});
subscribe.dispose();
- タイミングを遅らせる
// 延时1s
mObservable.delay(1, TimeUnit.SECONDS);
// 定时执行,每24小时执行一次
Observable.interval(24, TimeUnit.HOURS);
参照文書
Observable作成メソッドRxJavaの基本的な使用法のRxAndroidの詳細な説明
エラーがある場合は、指摘してください。