本文介绍了是否需要注销事件总线的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在Android中实现 MVP 模式,并且正在使用 EventBus 来通知活动"A"中的 P 重新输入活动"B"中发生了一些事情,以更新"A"中的视图.

I'm implementing MVP pattern in Android and I'm using EventBus to let know the Presenter from activity "A" that something happen at activity "B" to update views from "A".

我在构造函数内部将演示者注册到EventBus,但是没有看到可以取消注册的地方.

I registered the presenter to EventBus inside in constructor but I don't see any place where I could unregister it.

public class PresenterA extends nucleus.presenter.Presenter<ViewA> {

    public PresenterA() {
        EventBus.getDefault().register(this);
    }

    public void onEvent(ChangesEvent e) {
        // change views
    }
}
  1. 假设演示者的生存时间与应用程序一样长(在配置更改时不会重新创建),是否有必要完全取消注册?
  2. 当用户离开应用程序(关闭活动"A")时,引用将被释放还是内存泄漏?

推荐答案

  1. 注销非常重要,当用户离开应用程序时,这并不意味着立即清除资源
  2. 由于EventBus拥有对演示者的静态引用,因此只有在OS终止进程后,才释放它,因此被视为泄漏.

对于nucleus.presenter.Presenter,通常会在onTakeView(ViewType view)上注册,而在onDropView()上取消注册,因为事件处理会更改视图

As for nucleus.presenter.Presenter it will be common to register on onTakeView(ViewType view) and unregister on onDropView() since event handling changes the view

这篇关于是否需要注销事件总线的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-21 04:33