0

我正在尝试将事件总线添加到我的项目中,因为为了使代码更具可读性和应用程序健壮性,这是一个非常好的模式。
我需要听 Activity 生命周期方法。
让我解释一下为什么我需要这个。
我有活动,在此活动中,有一个正在运行的线程(或多个线程)与此活动完全相关,主 UI 线程将一些 UI 更改发布到主队列。
当活动将被破坏或暂停时,我需要暂停线程并在活动再次出现在屏幕上时恢复它。
当然我可以直接在 onDestroy 和 onStart 方法中暂停/恢复线程,但是还有一些其他组件也需要监听 Activity 生命周期方法。
有我的问题:

  1. 在这种情况下使用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 生命周期方法。但是我想知道片段是否不会被销毁到调用活动生命周期方法的时候,我还没有测试过。所以这里的主要问题是使用本机钩子方法机制在这里做需要的东西或使用事件总线更好。

  2. 下一个问题与主要问题没有直接关系。问题是关于android 的EventBus( EventBus Link ) 库的实现方式。为什么不让 listeners( bus.register(this);) 实现接口,例如用一种方法订阅onEvent(BusEvent event);。为什么不让这个方法接受一些基本类BusEvent。每次发生事件并onEvent调用方法时,都会在库实现中使用反射。我没有看到这种方法有任何优势,并且反射在 Java 中是相当重要的事情。

我将非常感谢任何答案或建议。

4

1 回答 1

1
  1. 你可以这样做,如果你有多个线程监听多个,这将是一个很好的解决方案activities,但是你需要将activity或一些传递id给事件,以便线程知道哪个活动停止/开始。如果您只使用一个活动并且有处理它的线程,那么我不会使用eventbus. 我eventbus仅在我有多个订阅者并且来自代码中的不同位置时使用,而不是在这种情况下它的一个activity和几个线程。

  2. 实际上在通过源代码之后,我认为你是对的。但我在某处读到,他们很快就会发布EventBus3.0 版。现在找不到所以我希望我没有想象到:)。它会更快更好,甚至可能像你提议的那样。

于 2015-06-19T21:47:01.513 回答