Android-如果视图模型包含活动侦听器引用,是否会发生内存泄漏?

问题描述

ViewModel引用了活动中定义的侦听器。现在,当更改设备方向时,会发生内存泄漏吗?

代码:

public class MainVM extends ViewModel {

private Listener listener;

public void setListener(Listener listener) {
this.listener = listener;
}

...
}
public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

MainVM mainVM = new ViewModelProvider(this).get(MainVM.class);

mainVM.setListener(new Listener() {
//methods
});

}

}

解决方法

通常不会。 这是创建第一个活动时的参考图。

Android --> mainActivity1 --> mainVM1 --> listener1

旋转手机时,第一个活动被销毁,并创建了一个新活动。

            mainActivity1 --> mainVM1 --> listener1
Android --> mainActivity2 --> mainVM2 --> listener2

由于没有指向您的mainActivity1根指针,因此可以对其进行垃圾回收。 即使mainVM1或listener1指向mainActivity1,也是如此。

如果mainVM1具有指向mainActivity1的指针,并且存在指向mainVM1的根指针,则它将不再存在。

问题不是“有什么指向我的活动”,而是“有指向我的活动的寿命比活动本身长得多”。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...