問題タブ [greenrobot-eventbus]
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.
java - Android : サービスからの GUI の更新
私は何をしたいですか?
私はAndroidでサービスを使用することを楽しみにしています.GUIを更新し、サービスからデータベースも使用したいと考えています。というライブラリがあることを知りましたEVENTBUS by greenrobot
が、安全に使用できるかどうかわかりません。
なぜ私が欲しいのですか?
実際には、バックグラウンドで実行されているサービスがすべてのデータ関連の作業を行い、バックグラウンドのみを担当し、すべてのフラグメントがサービスのイベントとサービスにのみ対応するように、Android のコードを記述したいと考えHTTP calls
てDatabase update
いsubscribes
ますpublish
。何らかのイベントが発生したとき。方法でコードを書きたいPub-Sub
。
これを行うことで、good separation between logic and GUI
関連する作業を達成できます。また、すべてのデータ関連の作業をおよび GUI でフラグメントのみでre-usability of the code
定義することで、 を実現できます。services
そのため、サービスから使用できるものを探していpub-sub library
ます。
android - Android EventBus - hasSubscriberForEvent() は常に false を返す
私が理解しているように、hasSubscriberForEvent(Class<?> eventClass)
this で Event をリッスンしている場合、 EventBus のメソッドは true を返す必要がありますeventClass
。しかし、それは常に false を返します。理由はわかりません。
私のフラグメントでは、EventBus を登録および登録解除し、Post をリッスンするメソッドを宣言します。
私のサービスでは、この Fragment が表示されているかどうかを確認する必要があります.1つの方法は、EventBus.getDefault().hasSubscriberForEvent(MyFragment.class)
. EventBusMyFragment
が何か登録されていることを確認した場合は true を返し、それ以外の場合は false を返すと予想していました。
何か足りないのでしょうか、それともhasSubscriberForEvent()
このように動作しませんか?
注:イベントが発生しEventBus.getDefault().post(new MyDummyObject());
た場合、EventBus が正常に登録および登録解除されていると想定します。
android - EventBus: 追跡する方法は?
フラグメントとアクティビティ間の通信にイベント バス(greenrobot) を使用しています。よく働く。
しかし、私が疑問に思っていたことの 1 つは、これらがどこで発射されたかをどのように追跡しているのかということです。
例:onEvent()
どこかでメソッドを見つけた場合、これが起動される場所を見つけるにはどうすればよいですか?
android - 進行状況ダイアログを閉じると、Genymotion エミュレーターでは機能しますが、実際のデバイスでは機能しません
バックグラウンド操作の実行中に進行状況ダイアログを表示しています。Eventbus を使用して、ダイアログを表示しているフラグメントにポストバックしています。ダイアログへの参照を保持するために変数を使用しています。Genymotion エミュレーターを使用してこのプログラムをテストすると、完全に動作します。実際のデバイスでテストすると、変数は null になります。
最初に、ユーザーに 4 桁のコードを入力するダイアログが表示されます。[OK] をクリックすると、4 桁のコードが処理され (非同期)、ProgressDialog(mAuthorizeProgress) が表示されます。
ユーザーが [OK] をクリックすると、進行状況ダイアログが表示されます。
これは、進行状況ダイアログを表示する関数です。
却下コードのスニペットを次に示します。
実際のデバイスからのログは次のとおりです。
エミュレータからのログは次のとおりです。
もちろん、プログレス ダイアログはエミュレータでは閉じられますが、実際のデバイスでは閉じられません。
私は完全に途方に暮れています。この問題をデバッグする方法についてアドバイスをいただければ幸いです。
android - EventBus が間違ったアクティビティにイベントを配信するのを防ぐ方法
アプリに A、B、C の 3 つのアクティビティがあるとします。ここで説明するように、A のみが EventBus に登録され、ここで説明されているようonStart()
に登録解除され、イベント X の受信時にユーザーを C にナビゲートするイベント ハンドラー メソッドがあります。onStop()
onEvent(X event){...}
ただし、以下の不幸なシナリオを参照してください。
- ユーザーが A を起動します。
- ユーザーが A でバックグラウンド操作を開始します。
- ユーザーは、バックグラウンド操作が完了するのを待たずに、A のボタンをタップして B に移動します。A は EventBus から登録解除されます。
- ユーザーは A に戻ります。A は再度 EventBus に登録されます。
- ユーザーが B に移動する前に要求されたバックグラウンド操作が完了すると、バックグラウンドからイベント X が発生します。
- イベント X は A に配信され、イベント ハンドラー (
onEvent(X event){...}
) はユーザーをすぐにアクティビティ C に移動します。
これは奇妙なユーザー エクスペリエンスです。イベントが再登録されたときにイベントが A に配信されないようにするにはどうすればよいでしょうか?
1 つの解決策は、 で進行中のバックグラウンド操作をキャンセルしonStop()
て、イベントが発生しないようにすることです。ただし、バックグラウンド操作をキャンセルできない場合があります。
GreenRobot の EventBus を使用しています。
android-annotations - AndroidAnnotations - 依存関係を追加せずに Singleton EBean を作成する
私はAndroid プロジェクトでandroidannotationsを使用しており、EBean を次のように定義しています。
この Bean は、最初に必要になったとき、つまり次の場合に作成されます。
とあるクラスで。このプロジェクトでもEventBusを使用しMyBean
てい@Subscriber
ます。Event
のインスタンスがMyBean
存在しないため(どこにも依存関係がないため) 、この関数は呼び出されません(が投稿されたとき)。MyBean
依存関係を特にどこにも追加せずにインスタンスを作成するにはどうすればよいですか?
私の一時的な解決策は、単純に Application クラスで Bean を定義することです。
android - Greenrobot EventBus と Guava の EventBus の違い
私はgreenrobotのEventBusをかなり頻繁に使用しています
https://github.com/greenrobot/EventBus
しかし、Guava には独自の EventBus があることに気付きました
com.google.common.eventbus.EventBus
大きな違いがあるかどうか誰かが知っていますか?
java - GreenRobot のイベントバスは注釈を表示できません。「パブリック メソッドはありません」
そこで、Green Robots のイベントバス モジュールを知りました。このページの指示に従って、動作させようとしました: http://greenrobot.org/eventbus/documentation/how-to-get-started/
十分に単純に思えます。
適切なコードを入力しましたが、デバイスで実行するとクラッシュします。
クラスの最初の数行は次のようになります。
/どうやら/注釈はそこにあります。コンパイルは警告なしで行われます。Gradleファイルで指定されているバージョン3.0.0を使用しています...
では、何が間違っているのでしょうか?(RTFM はありがたく受け入れました。関連する記事を含む FM の場所を教えてください。)
ありがとう!
-ケン