EventBus,是否可以在onCreate中获取粘性事件?

EventBus, is it possible to get the sticky event in the onCreate?

我正在使用 EventBus's postSticky 方法将数据从假设 SplashActivity 发送到主 activity,并根据该数据在 [=13= 中创建选项卡] 使用 ViewPager.

到目前为止效果很好,我可以在 @Subscribe onEvent(Example data) 方法中设置 ViewPager

例如:

@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onEvent(Example event){
    mainContentList = event.mainContentList;

    if (mViewPager != null) {
        setupViewPager(mViewPager, mainContentList);
    }

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(mViewPager);
}

当我们从 ActivityC

调用 MainActivity 时出现问题

现在 @Subscribe onEvent(Example data) 不会被调用,因为我们只从 SplashActivity 向它发帖,所以它不会被调用,ViewPager 也不会得到更新。

What I want:

我想尽早从 StickyPost 获取数据,这样我就可以在 activity 的 OnCreate 方法中初始化 ViewPager

我知道我可以使用应用程序级别的 Singleton 或创建一个 DataHolder class 等来存储数据,但是无论如何可以使用 EventBus 来实现吗?

感谢您抽出时间,如果您需要更多信息,请告诉我,我会更新。

当你创建一个事件订阅者时,你必须注册它(当它被销毁时取消注册)。正如 official documentation 中的状态,当您使用 activity 时,您会写:

 @Override public void onStart() {
     super.onStart();
     EventBus.getDefault().register(this); }

 @Override public void onStop() {   
 EventBus.getDefault().unregister(this);
     super.onStop(); }

如果你想使用单例订阅事件,你必须在唯一点初始化它,比如应用程序class并注册到eventbus。

问题的解决方法很简单,我们可以简单。我们在任何地方都调用 getStickyEvent,就像这样

示例:

EventBus eventbus = Bus.getInstance();

ExampleEvent event = eventbus.getStickyEvent(ExampleEvent.class);

    if ( event != null ){

        // Whatever we want to do with event

        // and then we can remove stickyEvent if we don't need it anymore

        eventbus.removeStickyEvent(event);
    }