AndroidのRxJavaとAndroid Architectural ComponentsのLiveDataを使用する理由が得られません。両者の用途や相違点がサンプルの例とともに説明されている場合は、どちらも。AndroidでRxJavaを使用するタイミングと、Android Architectural ComponentsからLiveDataを使用するタイミングを教えてください。
答えて
Android LiveDataは、元のオブザーバーパターンの変種であり、アクティブ/非アクティブのトランジションが追加されています。このように、それはその範囲において非常に限定的である。
Android LiveDataに記載されている例を使用すると、位置データを監視し、アプリケーションの状態に基づいて登録および登録解除するためのクラスが作成されます。
RxJavaは、より一般化された演算子を提供します。のは、この観測可能で、位置データを提供することを想定してみましょう:
Observable<LocationData> locationObservable;
観察できるの実装は、オペレーションを呼び出しを地図に戻るObservable.create()
を使用して構築することができます。監視対象が登録されると、コールバックが登録され、登録されていない場合、コールバックは登録解除されます。実装は、この例で提供されているコードと非常によく似ています。
のも、アプリケーションがアクティブであるとき真発すること、観察を持っていると仮定しましょう:
Observable<Boolean> isActive;
その後、あなたは以下の
Observable<LocationData> liveLocation =
isActive
.switchMap(active -> active ? locationObservable : Observable.never());
switchMap()
オペレータによってLiveDataのすべての機能を提供することができます現在の場所をストリームとして提供するか、アプリケーションがアクティブでない場合は何も提供しません。 liveLocation
が観測可能になったら、RxJava演算子を使用してそれを行うことができる多くのことがあります。私のお気に入りの例は次のとおりです。場所が変更されたときにのみアクションを実行します
liveLocation.distinctUntilChanged()
.filter(location -> isLocationInAreaOfInterest(location))
.subscribe(location -> doSomethingWithNewLocation(location));
、および場所は面白いです。 が時間の演算子を結合して速度を決定する同様の操作を作成することができます。さらに重要なのは、RxJava演算子を使用して、メインスレッド、バックグラウンドスレッド、または複数スレッドのいずれで操作が行われるかを詳細に制御できます。
RxJavaのポイントは、ライブラリーから提供された操作、またはユーザーが指定したカスタム操作を使用して、コントロールとタイミングを単一のユニバースにまとめることです。
LiveDataは、そのユニバースの1つの小部分だけをアドレス指定します。これは、liveLocation
の構築に相当します。
- 1. isInstanceOfを使用するタイミングと、(Scalaで)match-case-statementを使用するタイミングを教えてください。
- 2. boto3クライアントを使用するタイミングとboto3リソースを使用するタイミングを教えてください。
- 3. "as"キーワードを使用するタイミングと、キャストを使用するタイミングを教えてください。
- 4. マルチキャッチを使用するタイミングと再使用するタイミングを教えてください。
- 5. 動的コンテンツを使用するタイミングと、別のページに切り替えるタイミングを教えてください。
- 6. javaでgetInstance()メソッドを使用するタイミングを教えてください。
- 7. グリッドビューを使用するタイミングと、テーブル行でリピータを使用して表データを表示するタイミングを教えてください。
- 8. タスクを使用するタイミングとスレッドを使用するタイミング
- 9. undef_methodを使用するタイミングとremove_methodを使用するタイミングは?
- 10. viewDidLoadを使用するタイミングとawakeFromNibを使用するタイミング
- 11. assert()を使用するタイミングとtry catchを使用するタイミング
- 12. "return result"を使用するタイミングと "self.result"を使用するタイミング
- 13. Task.Runを使用するタイミングasync-awaitを使用するタイミングと組み合わせて使用するタイミング
- 14. HashMapではなくAndroidのArrayMapを使用するタイミングは?
- 15. Requirejsを使用するタイミングとバンドルされたjavascriptを使用するタイミング
- 16. Android GPUの使用方法を教えてください。
- 17. Android開発でBitmapとByte []を使用するタイミングは?
- 18. Android NDKでJNIEXPORTとJNICALLを使用するタイミングは?
- 19. Androidでcordova.file.externalRootDirectoryを使用するタイミングを知る
- 20. ノードsqlite3でデータベースを閉じるタイミングを教えてください。
- 21. BackboneJS:フェッチを使用するタイミングと同期を使用するタイミング
- 22. ワンホットエンコーディングを使用するタイミングとダミー変数を使用するタイミング
- 23. Codeigniter redirect()を使用するタイミングと、$ this-> load-> viewを使用するタイミング
- 24. バイト配列を使用するタイミングとストリームを使用するタイミング
- 25. ES6クラスを使用するタイミングとjavacriptの機能を使用するタイミング
- 26. コマンドウィンドウを使用するタイミング
- 27. ServletRequestListenerを使用するタイミング
- 28. Androidでスレッド/サービスを使用するタイミングは?
- 29. android - スレッドを使用するタイミングとサービスをいつ利用するのか混乱していますか?
- 30. 既存ブランチを使用するタイミングと新しいブランチを作成するタイミング
ありがとうございます。LiveDataドキュメントは、ロケーションサンプルをもう参照していないようです。より興味深い点があります(ロケーションサンプルあり):http://androidkt.com/livedata/ –