EventBus : No subscribers registered for event class
EventBusはactivityスタックに存在しないactivityにメッセージを送信するのに適していません.これは失敗しました.
例:
状況1:activityがまだ生成されていないので、postで、このような間違いを肯定します.
ケース2:1つのactivityが生成されたが、activityスタックには存在せず、メッセージが受信されない
ケース3:ライフサイクルの問題
公式推薦はこう書いています.
https://github.com/greenrobot/EventBus
実際にはこれはよくありません.onStopの中でログアウトするべきではありません.onDestroyの中でログアウトしたほうがいいです.
なぜなら、EventBusは既存のactivityにメッセージを送信し、購読者は登録しなければならず、ログアウトできないためです.
onStopでログアウトした場合、スタックにはこのactivityがありますがEventBusは登録されていないのでメッセージも受信できません.
新聞について:No Subscribers registeredの問題
次はstackflowから、いいですね.
In general, the EventBus is used to receive updated data for an already active activity or fragment. Think of the EventBus as more of a wrapper around an observer/consumer. For this example it looks like you are using it to pass data to another Activity.
だから、bundleのような標準的な方法で関連するデータを伝えて、intentの中で持って行ったほうがいいことがあります.
例:
状況1:activityがまだ生成されていないので、postで、このような間違いを肯定します.
ケース2:1つのactivityが生成されたが、activityスタックには存在せず、メッセージが受信されない
ケース3:ライフサイクルの問題
公式推薦はこう書いています.
https://github.com/greenrobot/EventBus
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
実際にはこれはよくありません.onStopの中でログアウトするべきではありません.onDestroyの中でログアウトしたほうがいいです.
@Override
protected void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
なぜなら、EventBusは既存のactivityにメッセージを送信し、購読者は登録しなければならず、ログアウトできないためです.
onStopでログアウトした場合、スタックにはこのactivityがありますがEventBusは登録されていないのでメッセージも受信できません.
新聞について:No Subscribers registeredの問題
次はstackflowから、いいですね.
In general, the EventBus is used to receive updated data for an already active activity or fragment. Think of the EventBus as more of a wrapper around an observer/consumer. For this example it looks like you are using it to pass data to another Activity.
だから、bundleのような標準的な方法で関連するデータを伝えて、intentの中で持って行ったほうがいいことがあります.