Android,注册 Fragments/Activity 之外的 Otto 活动?

Android, register for Otto events outside of Fragments / Activities?

Otto 在活动或片段中使用时效果很好,但我可以订阅 类 中没有 onPause / onResume / onDestroy 的事件吗方法?如果是这样,unregister 的最佳做法是什么?

Otto 没有检查对象是否已注册的方法。这就是为什么最佳实践说您应该更好地使用您提到的生命周期方法之一。

如果您在这些方法之外注册,您可以定义一个 boolean 字段并将其设置为 true(如果您已经注册了一个对象)。如果此字段为true,则无需重新注册。完成此对象后不要忘记注销它(例如,在 Activity.onDestroy() 中,您可以 post 一条注销所有此类实例的消息)。

您还可以查看 TinyBus 库,它扩展了 Otto 接口。还有Bus.hasRegistered(Obejct)方法,可以用来检查一个对象是否已经在总线上注册。它还为组件提供 Wireable API,这些组件监听 Activity 生命周期,并且可以在连接到 Activity 的总线实例被销毁时自行注册或注销。