問題タブ [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.

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

android - EventBus onClick を使用して ListView 内の項目の Uri を Fragment に送信する

startActivity を介してインテントを送信せずに listView アイテムの onClick イベントを登録する方法はありますか?代わりに、EventBus を使用して送信してイベントを送信するだけです。

断片:

イベントクラス:

ここには多くの問題があると確信していますが、少なくとも私がやろうとしていることが可能かどうか、そしておそらくいくつかの関連する例や読書へのポインタを知りたいと思います. EventBus を使用する前に、通常のインテントに慣れる必要があるかもしれませんが、より柔軟なオプションを最初に学ぶことができれば、それは素晴らしいことです。

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

android - クラスが呼び出される前に、イベントバスはどのように onevent メソッドを登録しますか?

listItemFragment は、UI を更新するイベントを ItemDetailFragment に送信します。しかし、ItemDetailFragment はこれまで使用されたことがないため、ItemDetailFragment の register() メソッドが呼び出されることはありません。listItemFragment に投稿されたイベントが ItemDetailFragment の onevent メソッドをどのように認識しているかを知りたいです。ソースコードは次のとおりです。

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

java - AbstractThreadedSyncAdapter から Activity への EventBus Post または postSticky

しばらくグーグルでドキュメントを読みましたが、答えが見つかりませんでした。私の[簡略化された]シナリオは次のとおりです。

ユーザーが最初にアプリにログインすると、同期要求が発生し、onPerformSync が呼び出されます。EventBus を介して AbstractThreadedSyncAdapter から MainActivity にイベントを投稿しようとしています。同期が完了したら、MainActivity で呼び出されてすべてが完了したことを示すイベントを投稿します、機能していません。私のコード:

AbstractThreadedSyncAdapter

onPerformSync:

そして MainActivity:

syncService からイベントを投稿することさえ可能ですか? そうでない場合、この問題の最善の解決策は何ですか?

ありがとう !

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

android - Android UI コンポーネントのイベント バスとライフサイクル

私は完璧な Android アプリケーション アーキテクチャを探しており、このトピックに関する素晴らしいブログ投稿をいくつか読みました。

1) http://www.mdswanson.com/blog/2014/04/07/durable-android-rest-clients.html

2) http://birbit.com/a-recipe-for-writing-responsive-rest-clients-on-android/

どちらの投稿でも、Android コンポーネント (アクティビティ、フラグメント、サービス) 間の通信にイベント バスを利用する方法について説明しています。

1 つ、しかし非常に重要なトピックがカバーされていませんでした。一時停止されたときに UI コンポーネントにポストされたイベントを処理する方法。

例: サービスは、アクティビティへのデータのダウンロードの完了時にイベントを投稿しています。そして、現時点では活動は一時停止しています。イベント バスが onPause() で登録解除されているため、このイベントは完全に失われています。

greendao の EvenBus はスティッキーイベントを提供しています。ただし、削除しないとメモリ リークが発生する可能性があります。

square の Otto は、スティッキー イベントの代わりに使用できる "Producer" パターンを紹介します。

最初の解決策では、スティッキー イベントが手動で削除されない場合、メモリ リークが発生する可能性があります。

2 つ目は、プロデューサー メソッドがサブスクライバーにデータを返すまで、どこかにデータを保持する必要があります。この解決策はより正しいように見えますが、より多くのコードを記述する必要があります。

このエッジケースに取り組む方法について、誰かアイデアを教えてください。クリーンなソリューションはありますか?

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

android - スレッド セーフを使用したイベントバスのベスト プラクティス

私のアプリには、ユーザー インタラクションのアクティビティと、データ モデルが変更される唯一の場所であるバックグラウンド サービスがあります。バックグラウンド サービスは、ネットワークからの着信メッセージだけでなく、ユーザーが行ったアクションもリッスンします。したがって、並行性の問題が発生する可能性がありますが、ハンドラーを使用して防止しようとしています。イベント レイヤーには、greenrobots Eventbus を使用します。

これはすべてうまく機能していますが、このユースケースを処理するための、よりスマートで高速なコードの広範ではない (したがって、エラーが発生しにくい) 方法があるのだろうか?

もう少し詳しく言うと:

  • ハンドラーなしで onEvent メソッドのシリアル実行を保証する方法はありますか?
  • 考えられるイベントごとに onEvent メソッドを持つことに代わるものはありますか?
  • 私がここでやっていることのより良いパターンはありますか?

これが私のアプローチです:

oncreate メソッドでサービスを登録します(アクティビティの場合は onstart でこれを行います)

そして onDestroy で、もう一度登録を解除します。

着信イベントに反応するときはいつでも、同時実行の問題が発生する可能性があるため、シリアル実行を保証したいと考えています。これは、ユーザー インタラクションやネットワーク経由の他のユーザーからの着信イベントがあるためです。そこで、ハンドラーを使用することにしました。

関心のあるイベントごとに、小さな「passToHandler」ヘルパー関数を介してシリアル実行を保証するために、イベントをハンドラーに渡すだけの onEvent メソッドがあります。

「プロセス..」メソッドは「データマジック」が発生する場所であり、私の質問には関係ありません。

そしてもちろん、可能なイベントごとに、通常は次のように非常にスリムなクラスを作成しました。

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

android - サーバーと通信するための Android サービス

サーバーとの安定した接続を確立するには、サービスが必要です。
アクティビティとサービスは、双方向の通信を行う必要があります。

ここに私が知っているオプションがあります

  • インテント サービスを使用する
  • Service クラスを拡張 (別のプロセスで実行する) し、Messaging を使用して通信する

私の考え:

  • インテント サービスは優れており、独自のスレッドで実行されますが、タスクが完了すると停止します。私はそれをしたくありません。たとえば、何らかの理由で接続が中断された場合、サービスを終了するのではなく、再接続を試みる必要があります。

  • サービスクラスの拡張は理にかなっています。私は以前、サービスとの通信にメッセージングを使用するプロジェクトに取り組んでいました。ここでの問題は、プロジェクトが成長するにつれて、通信の管理が難しくなることです。

サービスが別のプロセスまたはスレッドで実行され、何らかの理由 (START_STICKY など) で終了した場合に再度開始する必要があるアプローチを探しています。

また、通信が簡単で、 OttoEventBusのようなものが使用できるとよいでしょう。

編集:問題は、それを実装する理想的な方法は何ですか。これにより、メッセージを処理する必要がなくなり、STICKY サービスが提供されます。

0 投票する
4 に答える
9414 参照

android - Greenrobot EventBus イベントが受信されない

Greenrobot EventBus を使用して、あるアクティビティから別のアクティビティにイベントを渡します。

フローは次のようなものです: Activity1 開始 -> バーコードのスキャン -> Activity2 開始 -> 応答を受け入れるか拒否し、Activity1 にイベントを送信します。

したがって、Activity2 は、次のようにして新しいイベントを Activity1 に送信します。

Activity1 では、イベント バスを登録します。また、イベントを受け取るための public onEvent(MyEvent myEvent) メソッドもあります。

問題は、onEvent がトリガーされないことです。イベント バス オブジェクトに問題がある可能性があることを確認しました (別のインスタンスやアクティビティ 1 と 2 の何かなど) が、同じインスタンスです。

何が問題なのかわかりません。誰かが見て、私が間違っていることを教えてくれたら、とても感謝しています。

ありがとう!