[解決済み】AndroidでRxJavaを使用するタイミングとAndroid Architectural ComponentsのLiveDataを使用するタイミングは?
質問
AndroidのRxJavaとAndroid Architectural ComponentsのLiveDataを使う理由がわかりません。両者の使用例と違いを説明したコード形式のサンプル例と一緒に説明してもらえると本当に助かります。
どのように解決するのですか?
Android LiveDataは、オリジナルのobserverパターンの変形で、active/inactiveの遷移が追加されています。そのため、非常に限定された範囲での使用となります。
で説明した例を使うと Android LiveData 位置情報を監視し、アプリケーションの状態に応じて登録・解除を行うクラスが作成されます。
RxJavaはより一般化された演算子を提供します。このobservableが位置情報を提供すると仮定してみましょう。
Observable<LocationData> locationObservable;
observableの実装は、以下のようにして構築することができます。
Observable.create()
を使用してコールバックの操作をマッピングします。observableが購読されているとき、コールバックは登録され、購読が解除されたとき、コールバックは登録解除されます。実装は、例で提供されたコードと非常に似ています。
また、アプリケーションがアクティブなときにtrueを発するobservableがあると仮定しましょう。
Observable<Boolean> isActive;
そうすると、以下のようにLiveDataの全機能を提供することができます。
Observable<LocationData> liveLocation =
isActive
.switchMap( active -> active ? locationObservable : Observable.never() );
は
switchMap()
演算子は現在の位置をストリームとして提供するか、アプリケーションがアクティブでない場合は何も提供しません。一度
liveLocation
RxJavaの演算子を使って、いろいろなことができます。私のお気に入りの例です。
liveLocation.distinctUntilChanged()
.filter( location -> isLocationInAreaOfInterest( location ) )
.subscribe( location -> doSomethingWithNewLocation( location ) );
これは、場所が変わったときにのみアクションを実行し、その場所が興味深いものであることを示します。同じような操作で 時間演算子を組み合わせて速度を決定する。さらに重要なことは、RxJavaの演算子を使って、操作がメインスレッドで行われるか、バックグラウンドスレッドで行われるか、複数のスレッドで行われるかを詳細に制御することができることです。
RxJavaのポイントは、ライブラリから提供される操作や、ユーザーが提供するカスタム操作を使って、制御とタイミングを1つの世界に融合させることです。
LiveDataは、その世界のほんの一部分にしか対応していません。
liveLocation
.
関連
-
[解決済み] Androidのgravityとlayout_gravityの違いは何ですか?
-
[解決済み] setBackgroundDrawable() 非推奨
-
[解決済み] Android Fragment onAttach() 非推奨
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Bitmapオブジェクトに画像を読み込む際にOutOfMemoryが発生する問題
-
[解決済み] Eclipseにプロジェクトをインポートした後に「Must Override a Superclass Method」エラーが発生する。
-
[解決済み] グリッドレイアウトにおけるフリングジェスチャーの検出
-
[解決済み] Eclipseが起動できない - Javaは起動したが終了コード=13を返した
-
[解決済み] なぜフラグメントなのか、そしてアクティビティの代わりにフラグメントを使用するのはどんなときか?
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】com.android.ide.common.process.ProcessException: aaptの実行に失敗しました! どうすればいいですか?
-
[解決済み】java.lang.RuntimeException: アクティビティを開始できない ComponentInfo
-
[解決済み】アンドロイドクロームブラウザのモバイルウェブアプリケーションのメニューでHTMLユニコード ☰が検出されない。
-
[解決済み] 現在のテーマでスタイル 'coordinatorLayoutStyle' を見つけることができませんでした。
-
[解決済み】apkファイルのインストール中に「パッケージが破損しているようです」というエラーが発生する。
-
[解決済み】起動アクティビティを特定できませんでした。デフォルトのアクティビティが見つかりませんでした
-
[解決済み】'dependencies' を '(groovy.lang.Closure)' に適用できない。)
-
[解決済み] エラー - Android リソースのリンクに失敗しました (AAPT2 27.0.3 Daemon #0)
-
[解決済み] Android: @drawable/picture を drawable に変換するのに失敗しました。
-
[解決済み] APKのインストール中にDELETE_FAILED_INTERNAL_ERRORエラーが発生する。