我正在尝试将事件总线添加到我的项目中,因为为了使代码更具可读性和应用程序健壮性,这是一个非常好的模式。
我需要听 Activity 生命周期方法。
让我解释一下为什么我需要这个。
我有活动,在此活动中,有一个正在运行的线程(或多个线程)与此活动完全相关,主 UI 线程将一些 UI 更改发布到主队列。
当活动将被破坏或暂停时,我需要暂停线程并在活动再次出现在屏幕上时恢复它。
当然我可以直接在 onDestroy 和 onStart 方法中暂停/恢复线程,但是还有一些其他组件也需要监听 Activity 生命周期方法。
有我的问题:
在这种情况下使用EventBus是否正确,或者最好直接在活动生命周期方法中执行所有操作而不使用事件总线。在活动生命周期中使用事件总线是模棱两可和不正确的。
公共类 ExampleActivity 扩展 Activity {
private EventBus bus = EventBus.getDefault(); private TextView view; @Override protected void onCreate(Bundle savedInstanceState) { bus.register(this); bus.post(new OnCreateEvent("Activity has been born")); super.onCreate(savedInstanceState); } @Override protected void onDestroy() { // Unregister bus.post(new OnDestroyEvent("Activity is going to die")); bus.unregister(this); super.onDestroy(); }
我在这里看到的一个优点是,每次您的部分活动需要时,您不必在活动生命周期方法中添加一些逻辑。Activity 内容可以很复杂,也可以使用 Fragment,当然你也可以使用 Fragment 生命周期方法。但是我想知道片段是否不会被销毁到调用活动生命周期方法的时候,我还没有测试过。所以这里的主要问题是使用本机钩子方法机制在这里做需要的东西或使用事件总线更好。
下一个问题与主要问题没有直接关系。问题是关于android 的
EventBus
( EventBus Link ) 库的实现方式。为什么不让 listeners(bus.register(this);
) 实现接口,例如用一种方法订阅onEvent(BusEvent event);
。为什么不让这个方法接受一些基本类BusEvent
。每次发生事件并onEvent
调用方法时,都会在库实现中使用反射。我没有看到这种方法有任何优势,并且反射在 Java 中是相当重要的事情。
我将非常感谢任何答案或建议。