WeakReference <>在此特定情况下是否有助于GC?

问题描述

我不确定从长远来看这是否会给我带来一些内存泄漏问题,并且我想知道在这种情况下使用弱引用是否会有所不同:

public abstract class ChangeObserver<X extends SomeClass> {

   X someClass;

   public ChangeObserver(X someClass) {
       this.someClass= someClass;
   }

   public void notifySomeClass(
   ) {
       onChanged().onChanged(someClass);
   }

   public abstract OnDataChanged<X> onChanged();

   @FunctionalInterface
   public interface OnDataChanged<X> {
       void onChanged(X x);
   }

}

这会在程序的生命周期中引起问题吗?是否可以通过使用弱引用来解决?

感谢@Hulk和@tashkhisi,我提供了此解决方案,如果缺少某些内容,请随时进行纠正。

public abstract class ChangeObserver<X extends SomeClass> {

    private WeakReference<X> someClassWeakRef;
    private OnDataChanged<X> observer;

    public ChangeObserver(X someClass) {
        this.someClassWeakRef = new WeakReference<>(someClass);
        observer = onChanged();
    }

    public void notifySomeClass(
    ) {
        observer.onChanged(someClassWeakRef.get());
    }

    public abstract OnDataChanged<X> onChanged();

    @FunctionalInterface
    public interface OnDataChanged<X> {
        void onChanged(X x);
    }

}

我仍然缺少的是这个removeObserver()方法究竟应该做什么以删除观察者,如果我要使用那种避免内存泄漏的特定方法,是否只是设置观察者= null吗?

谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)