在片段上调用注册/取消注册事件总线的最佳方法是什么?

时间:2016-03-02 23:47:44

标签: android android-fragments android-lifecycle event-bus

我是使用来自otto lib的Event Bus全新的,到目前为止,我创建了一个Event Bus Singleton类,我在我的代码的几个部分中使用它。现在我正在处理片段视图,但我仍有一个问题,关于:

注册/取消注册活动总线的最佳时间是什么时候?

在几篇文章中,我读到了onStart()和onStop(),但没有任何具体原因。

public class SomeFragment extends Fragment {
  @Override
    public void onStart() {
        super.onStart();
        EventBusSingleton.register(this);
    }

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

如果我按照与执行调用onResume()和onPause()的活动相同的方法也可以正常工作。

public class SomeFragment extends Fragment {
  @Override
    public void onResume() {
        super.onResume();
        EventBusSingleton.register(this);
    }

    @Override
    public void onPause() {
        super.onPause();
        EventBusSingleton.unregister(this);
    }
}

每种通话方式可能存在的潜在风险(如果存在)?

2 个答案:

答案 0 :(得分:3)

当您的活动不再具有焦点但仍然可见时(在您的活动之上考虑对话或提醒),

onPause()/onResume()会被调用。

onStop()/onStart()在您的活动不再可见时被调用。

使用哪一个取决于您的使用案例。我认为在暂停状态下执行回调并不是一个真正的问题所以我只需将注册/取消注册放在onStop()/ onStart()中,但如果你真的想确定,你可以把它们放在onPause()中/的onResume()。

答案 1 :(得分:0)

我的问题是我的脆弱者有两个实例编码错误,y删除了不必要的实例并解决了问题