EventBus - 从不使用Subscribe方法

时间:2017-03-20 08:10:53

标签: android

在片段中,我想接收消息,但从不使用Subscribe方法, 该方法不接收我发布的消息

片段代码:

@Override
public void onStart() {
    super.onStart();
    EventBus.getDefault().register(this);
}
@Override
public void onStop() {
    EventBus.getDefault().unregister(this);
    super.onStop();
}
@Subscribe(threadMode = ThreadMode.BackgroundThread)
public void getMessage(Integer integer){
        hotDao = new HotDao(this);
        hotDao.getDataHot(null);
}

在MainActivity中,我发布了

代码:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_guide);
    EventBus.getDefault().post(1);
    loadView= (LoadView) findViewById(R.id.activity_guide_loadview);
    startMainActivity();
}

2 个答案:

答案 0 :(得分:1)

可能是因为在总线有足够的时间进行初始化之前发送了消息。

要检查一下,只需尝试通过执行类似

的操作来延迟帖子1秒或2秒(在您的MainAcytivity中)
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_guide);

    loadView= (LoadView) findViewById(R.id.activity_guide_loadview);
    startMainActivity();

    final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
    @Override
      public void run() {
        EventBus.getDefault().post(1);
      }
    }, 1500);
}

此外,您可以使用Sticky Event,以便即使在创建事件之前发送事件,您的片段也可以获取它。

编辑:正如BjörnKechel所述,正确的解决方案是将帖子放在MainActivity的onResume中。延迟仅用于检查在发送消息后总线是否已初始化的问题。

答案 1 :(得分:0)

您过早发布活动,请查看片段生命周期:

enter image description here

因此,如果你在onResume中调用它,你应该很高兴。另一种方法是使用Sticky Events

@Subscribe(sticky = true, threadMode = ThreadMode.BackgroundThread)