Java 如果ViewModel持有此活动实现的接口引用,GC是否会收集活动引用?
假设我有一个实现接口i的活动A。我的ViewModel类(VM)持有对实现接口i的对象的引用:Java 如果ViewModel持有此活动实现的接口引用,GC是否会收集活动引用?,java,android,interface,garbage-collection,viewmodel,Java,Android,Interface,Garbage Collection,Viewmodel,假设我有一个实现接口i的活动A。我的ViewModel类(VM)持有对实现接口i的对象的引用: class A extends Activity implements I{ ... onCreate(){ mViewModel.setI(this); } } class B extends ViewModel { private I iRef; ... } 如果活动A销毁,GC会收集活动对象吗?或者由于ViewMode类中的接口引用,对象将不符合GC条件 更新
class A extends Activity implements I{
...
onCreate(){
mViewModel.setI(this);
}
}
class B extends ViewModel {
private I iRef;
...
}
如果活动A销毁,GC会收集活动对象吗?或者由于ViewMode类中的接口引用,对象将不符合GC条件
更新:
在我的项目中,所有VM存储在某个VMHolder类中,以便快速将其分配给视图(活动),这样当活动被销毁时,VM对象就不会被销毁 如果活动A销毁,GC会收集活动对象吗 是的,只要
I iRef
不是static
,并且没有在某个线程中使用,您的活动及其所有对象都可以进行垃圾收集
由于ViewMode中的接口引用,对象将不符合GC条件
上课
否,
mViewModel
对象的生命周期较短,或者取决于活动的生命周期,因此当活动的对象死亡时,它的所有成员也会死亡,在我的项目中,垃圾收集将不会出现问题。在某个VMHolder类中的所有VM存储将快速将其分配给视图(活动),因此,当活动被销毁时,VM对象不会被销毁。我不知道您在这里使用view holder和view model究竟想实现什么,也不知道您的VMHolder
在做什么,但只要不使用静态引用,也不使用线程更新viewmodel,就不太可能看到内存泄漏,而且您可以利用它