、「それはすでに解除されて。えっ、何もしません退会する購読を返しSubscriptions.unsubscribed()、のポイントは何ですか?1で
。x、Subscriptions.unsubscribed()
は、コントロールがRxJavaからコードに戻されたときに、操作が完了した(または最初に実行されない)Subscription
インスタンスを返すために使用されます。登録解除されているのはステートレスで一定の状態なので、返されたSubscription
はシンプルです。Subscription
を見るだけで、完了/未登録の1つを別のものから区別することはできません。
2.xでは、対応するインターフェイスの公開バージョンと内部バージョンがDisposable
です。内部バージョンはほとんどの場合、NullPointerException
と一般的なヌルチェックを避け、GCをいくらか助けて、終了したものと一緒にライブDisposable
を交換するために採用されています。
どうしますか?
通常、あなたはSubscriptions.create()
について心配する必要はありません。それはあなたがあなたのエンド加入者のライフサイクルにアタッチしたいリソースを持っている場合のために提供されています
FileReader file = new FileReader ("file.txt");
readLines(file)
.map(line -> line.length())
.reduce(0, (a, b) -> a + b)
.subscribe(new Subscriber<Integer>() {
{
add(Subscriptions.create(() -> {
Closeables.closeSilently(file); // utility from Guava
});
}
@Override public void onNext(Integer) {
// process
}
// onError(), onCompleted()
});
この例では、使用する1つの方法を実証し、代わりにそれにもかかわらずusing
を介して発現することができます。
Observable.using(
() -> new FileReader("file.txt"), // + try { } catch { }
file -> readLines(file).map(...).reduce(...),
file -> Closeables.closeSilently(file)
)
.subscribe(...)
ありがとうございます。質問:Androidアクティビティサブスクリプションを保存すると、アクティビティが再開されたときにオブザーバブルに再接続することができますか?あなたは例を挙げることができますか?作成したサブスクリプションをデフォルトの実装でどのように使用すればよいですか?私はAndroidアプリでいくつかのサブスクリプション(RxAndroidBle用)を宣言しましたが、問題はないようです。 –
'Subscription'リファレンスを保存する主な用途は、後で' .dispose() 'を呼び出すことです。したがって、サブスクリプションを処理しない場合は、 'Subscription'リファレンスを削除し、' myObservable.subscribe(); 'を変数に代入せずに記述してください。典型的な使い方は 'onResume()'メソッドに登録し、 'Subscription'を格納し、' onPause() 'で' subscription.dispose(); 'を呼び出します。 –