问题描述
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的根指针,则它将不再存在。
问题不是“有什么指向我的活动”,而是“有指向我的活动的寿命比活动本身长得多”。