在碎片上调用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()。