問題タブ [rx-android]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
5219 参照

rx-java - flatMap で Timer Observable を使用して結果を出力する方法

次の方法で、メンテナンス タスクに rxjava を使用しています。

定期的なメンテナンスが必要なクラスでは、次の静的サブスクリプションを使用します。これにより、クラスがメモリにロードされたときに Observable が初めて起動され、その後、指定された定期的な間隔で起動されます。

ここで、メンテナンスの結果を UI に報告したい状況があります。

通常、次のスキーマを使用します

しかし、ここには一度だけ実行される Observable があります。

定期的に実行される Observable の場合、Subscriber で Action を呼び出す方法が見つからなかったため、subscriber.onNext() を使用して結果を渡すことができました。オブザーバブルに適した署名がないように見えます。これは、timer() から時間がかかり、同時にアクションでサブスクライブできます。しかし、rxjavaを知っていると、トリックがあると確信しています;-)

zip を使用して Timer Observable と 1 回限りの Observable を圧縮する (基本的には 2 つのバージョンを一緒に圧縮する) こともできますが、動作が少し異なるため、最初の構造を使用します。

--

次の方法で、両方のバージョンを 1 つにマージしようとしました。

「null」Observable を作成して発行する代わりに、サブスクライバーに結果を送信できるものを作成します。

かなり面倒ですが、これでうまくいくはずですよね?もっと簡単な解決策はありますか?あなたの考えは何ですか?

0 投票する
1 に答える
2757 参照

rx-java - Observable が Timer 反復をキューに入れないようにする方法

次の Observable を使用して通常のタスクを実行しています。Observable は、クラスが最初にメモリにロードされたときに起動され、定期的にコードを実行します。これは単一の Observable であるため、コードが 2 回目に起動されることはなく、間隔よりも長く実行された場合に並列で処理されることが [私のテストから見えるように] 保証されます。

ただし、これには、rxjava が遅延エミッションを蓄積し、遅延イテレーションが終了すると高速シーケンスで起動するという欠点もあります。例: タイマーが 1000 ミリ秒ごとに反復するようにプログラムされていて、反復 n に 5000 ミリ秒かかる場合、反復 n+1、n+2、n+3 などは順次開始されますが、タイマー間隔に従わずに次々と開始されます。 .

それほど悪くはありませんが、実際に問題なのは、Android が数時間スリープ状態になるとどうなるかです。デバイスが起動すると、 rxjava は失敗したすべての繰り返しを高速シーケンスで起動するため、パフォーマンスが大幅に低下します。

逃した反復を忘れるようにrxjavaに指示するにはどうすればよいですか? 反復に時間がかかる場合は、その反復が終了したときにタイマーを開始するか、失敗した反復を破棄して次の反復を開始する必要があります。sample() およびその他のフィルターを使用しようとしましたが、どういうわけか目的の効果が得られないか、それらを正しく適用する方法がわかりません。

コードが複数のスレッドから実行されないようにしたいので、反復ごとに新しい Observable を作成したくないことに注意してください (そのために zip を使用できます)。

0 投票する
1 に答える
1716 参照

java - RxAndroidは、カメラの変更時にGoogleマップをデバウンスします

Google マップを使用し、カメラの変更をリッスンするアプリケーションがあります。私の問題は、カメラを変更するたびにバックエンドをリクエストする必要があることです。私がやりたいことは、RxAndroid/Java を使用してデバウンスすることで、リクエストの数を制限することです。

私のコードは次のようになります。

ご覧のとおり、両方 (subscribeOn とobserveOn) に MainThread を使用することを強制していますが、「メイン スレッドではありません」というエラーが引き続き表示されます。

ここでスタックトレース:

何か考えはありますか?

注: Observable.create(...) から map.setOnCameraChangeListerner(...) を取得すると、正しく動作します。

0 投票する
1 に答える
5400 参照

android - RxJavaで遅延のあるリストからアイテムを発行する方法は?

Retrofit を使用して REST API からブックマークを取得しています。

ここで、このリストから各アイテムを遅延させて発行したいと思います。

私はJava でこれonCompletedと似たようなことをしましたが、決してトリガーされません。

私が間違っていることは何ですか?

使用法: