在碎片上调用register/unregister eventbus的最佳方法是什么?
问题描述:
我是全新的使用事件总线从otto库,到目前为止,我创建了一个事件总线Singleton类,我在我的代码的几个部分使用。现在我正在研究片段视图,但我仍然有一个问题,关于:在碎片上调用register/unregister eventbus的最佳方法是什么?
何时是注册/取消注册我的事件总线的最佳时间?
在几篇文章中,我读了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);
}
}
每种呼叫方式可能存在哪些潜在风险(如果存在)?
答
onPause()/onResume()
在您的活动不再具有焦点但仍可以看到的时候被调用(想想活动顶部的对话框或警报)。
onStop()/onStart()
在您的活动不再可见时被调用。
要使用哪一个取决于您的用例。我认为在暂停状态下执行回调并不是一个真正的问题,因此我只需将注册/取消注册放入onStop()/ onStart()中,但是如果您确实想确认,可以将它们放入onPause() /的onResume()。