如果 ViewModel 持有此 Activity 实现的接口引用,GC 会收集 Activity 引用吗?

Will GC collect Activity reference if ViewModel holds interface reference which this Activity implements?

假设我有 Activity A 实现接口 I。我的 ViewModel class (VM) 持有对实现接口 I 的对象的引用:

class A extends Activity implements I{
  ...
  onCreate(){
    mViewModel.setI(this);
  }
}

class B extends ViewModel {
   private I iRef;
   ...
}

如果 activity A 销毁,GC 会收集 activity 对象吗?或者由于 ViewMode 中的接口引用,对象将不符合 GC 的条件 class ?

更新: 在我的项目中,所有 VM 存储在一些 VMHolder class 中以快速将其分配给视图(activity),因此当 activity 销毁时 VM 对象不会销毁。

Will GC collect activity object if activity A destroys ?

是的,只要 I iRef 不是 static 并且没有在某些线程中使用,您的 activity 和其中的所有对象都可以进行垃圾回收

Object will be ineligible for GC because of interface reference in ViewMode class ?

不,mViewModel 对象的生命周期较短或取决于 activity 的生命周期,所以当 activit 的对象死亡时,它的所有成员也死亡,不会有垃圾收集问题