Eventbus onMessageEvent没有被调用 [英] Eventbus onMessageEvent not getting called

查看:695
本文介绍了Eventbus onMessageEvent没有被调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经在项目中实现了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆