Eventbus onMessageEvent没有被调用 [英] Eventbus onMessageEvent not getting called
问题描述
我已经在项目中实现了EventBus,但是我没有得到所有事件
I have implemented EventBus in my project but I am not getting all of my events
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.btn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
EventBus.getDefault().post(new MessageEvent());
EventBus.getDefault().post(new MessageEvent2());
}
});
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event)
{
Toast.makeText(this, "MainActivity called", Toast.LENGTH_SHORT).show();
};
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
}
在这里,我在onClick()中创建了2个事件; 这是我的AnotherActivity,我还有另一个@Subscribe
Here i created 2 event inside onClick(); And this is my AnotherActivity where i have another @Subscribe
public class AnotherActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_another);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent2 event2)
{
Toast.makeText(this, "AnotherActivity called", Toast.LENGTH_SHORT).show();//Not getting called
};
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
}
我不知道为什么我的第二个吐司没有被召唤,我已经正确地完成了每件事.
I dont know why my second toast is not getting called, i have done every thing correctly.
我怀疑还没有创建AnotherActivity
,所以没有调用我的事件是这样,那么EventBus的用途是什么?
What i suspect is the AnotherActivity
is not created yet so my event is not called is that is so what is use of EventBus then?
推荐答案
我怀疑还没有创建AnotherActivity,所以我的活动 不被称为是
What i suspect is the AnotherActivity is not created yet so my event is not called is that is so
是的,如果事件发生在过去并且组件(活动)未处于活动状态/创建的状态,则该事件将不会被接收.
Yes, if the event happened in past and the component(activity) is not active/created then the event will not be received.
那么,EventBus的用途是什么?
what is use of EventBus then?
您可以使用粘性事件来收听新近发生的事件创建的活动
You can use Sticky Event to listen to past events in newly created activity
因此请使用postSticky
EventBus.getDefault().postSticky(new MessageEvent2());
并在subscribe
批注中添加sticky = true
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent2 event2){
Toast.makeText(this, "AnotherActivity called", Toast.LENGTH_SHORT).show();//Not getting called
};
或者您可以手动接收它们
or you can receive them manually
MessageEvent2 msg2 = EventBus.getDefault().getStickyEvent(MessageEvent2.class);
// you can also remove it using
// EventBus.getDefault().removeStickyEvent(msg2);
或将其从历史记录中删除
or remove it from history as well
MessageEvent2 msg2 = EventBus.getDefault().removeStickyEvent(MessageEvent2.class);
if(msg2!=null){//do something}
这篇关于Eventbus onMessageEvent没有被调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!