gpt4 book ai didi

java - 在 Android 中使用事件总线以及 Activity Lifecycle 方法和库实现

转载 作者:行者123 更新时间:2023-12-01 11:29:23 25 4
gpt4 key购买 nike

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

  1. 在这种情况下使用EventBus是否正确,或者最好直接在 Activity 生命周期方法中执行所有操作而不使用事件总线。在 Activity 生命周期中使用事件总线是不明确且不正确的。

    公共(public)类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 部分需要时,您不必在 Activity 生命周期方法中添加一些逻辑。 Activity内容可以非常复杂,也可以使用fragment,当然也可以使用fragment的生命周期方法。但我想知道在调用 Activity 生命周期方法时 Fragment 是否不会被销毁,我还没有测试过。所以这里的主要问题是使用 native 钩子(Hook)方法机制来完成这里所需的工作或使用事件总线更好。

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

如果您有任何答案或建议,我将非常感激。

最佳答案

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

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

关于java - 在 Android 中使用事件总线以及 Activity Lifecycle 方法和库实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30544203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com