Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 是否需要注销事件总线_Android_Memory Leaks_Event Bus - Fatal编程技术网

Android 是否需要注销事件总线

Android 是否需要注销事件总线,android,memory-leaks,event-bus,Android,Memory Leaks,Event Bus,我正在安卓系统中实现MVP模式,我正在使用EventBus让活动“A”的p报告者知道活动“B”发生了什么,以更新“A”的视图 我在构造函数中向EventBus inside注册了演示者,但我看不到任何可以取消注册的地方 public class PresenterA extends nucleus.presenter.Presenter<ViewA> { public PresenterA() { EventBus.getDefault().register

我正在安卓系统中实现MVP模式,我正在使用EventBus让活动“A”的p报告者知道活动“B”发生了什么,以更新“A”的视图

我在构造函数中向EventBus inside注册了演示者,但我看不到任何可以取消注册的地方

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

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

    public void onEvent(ChangesEvent e) {
        // change views
    }
}
公共类presenter扩展了nucleus.presenter.presenter{
公共演讲者(){
EventBus.getDefault()寄存器(此);
}
公共无效事件(变更事件e){
//改变看法
}
}
  • 当演示者的寿命与应用程序一样长时(在配置更改时不会重新创建演示者),是否有必要取消注册
  • 当用户离开应用程序(关闭活动“A”)时,引用将被释放还是内存泄漏
  • 注销很重要,当用户离开应用程序时,这并不意味着资源会立即被清除
  • 由于EventBus持有对presenter的静态引用,所以在OS终止进程之前,它不会被释放,因此被视为泄漏

  • 至于
    nucleus.presenter.presenter
    onTakeView(ViewType视图)
    上注册和在
    onDropView()上注销是很常见的
    由于事件处理更改了视图

    应用程序直到Android根据杀死它才真正结束,但是拥有一个无法消亡的引用在视图层次结构(活动/片段)中是一个问题。EventBus.getDefault()确实是一个静态引用,但它保留了对演示者的引用,该演示者在活动结束时与视图分离。这被认为是内存泄漏吗?另外,如果您不注销,在某个总线事件处理程序中获得的某些UI代码可能会尝试调用已回收或已处置的视图