【问题标题】:Will GC collect Activity reference if ViewModel holds interface reference which this Activity implements?如果 ViewModel 持有该 Activity 实现的接口引用,GC 会收集 Activity 引用吗?
【发布时间】:2017-10-30 10:13:09
【问题描述】:

假设我有实现接口 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 对象不会被破坏。

【问题讨论】:

    标签: java android interface garbage-collection viewmodel


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 在我的项目中,所有VM都存储在某个VMHolder类中以快速将其分配给视图(活动),因此当活动被破坏时VM对象不会被破坏。
    • 我不明白您在此处通过视图持有者和视图模型实现的实际目标以及您的 VMHolder 正在做什么,但只要不使用静态引用且不使用线程用于更新 viewmodel ,不太可能看到内存泄漏,另外你可以求助 some inbuild tools
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多