如果ViewModel保存此Activity实现的接口引用,GC是否会收集Activity引用?

时间:2017-10-30 10:13:09

标签: java android interface garbage-collection viewmodel

假设我有一个实现接口I的Activity 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的条件?

更新 在我的项目中,所有VM存储在某个VMHolder类中以快速将其分配给视图(活动),因此VM对象在活动销毁时不会销毁。

1 个答案:

答案 0 :(得分:2)

  

如果活动A销毁,GC会收集活动对象吗?

是的,只要I iRef不是static且未在某个线程中使用,您的活动及其中的所有对象就有资格进行垃圾回收

  

由于ViewMode中的接口引用,对象将不符合GC的条件   上课?

不,mViewModel对象的生命周期较短或取决于活动的生命周期,因此当活动对象死亡时,所有成员也将死亡,垃圾收集不会出现问题