Подписаться слабо на Observable - PullRequest
0 голосов
/ 03 июля 2019

У меня есть класс, экземпляры которого создаются Java (через GetInstance).
Класс подписывается на наблюдаемое в его конструкторе.
У меня нет контроля над временем жизнииз этих экземпляров, и у меня также нет возможности узнать, когда экземпляр больше не нужен, поэтому я не могу просто отписаться.
Из-за подписки на наблюдаемое мои экземпляры никогда не собираются мусором.

Поэтому я хотел бы подписаться на наблюдаемые таким образом, чтобы не мешать сбору мусора.Возможно ли это?

Вот что я пробовал, но я не уверен, как проверить, что он действительно делает то, что должен:

class WeakConsumer implements Consumer<ObsType> {
    private final WeakReference<MyType> ref;
    public WeakConsumer(WeakReference<MyType> ref) { this.ref = ref; }

    @Override
    public void accept(ObsType value) throws Exception {
        MyType instance = ref.get();
        if(instance != null) { 
            // Do something
        }
    }
}

И в классе MyType:

obs.subscribe(new WeakConsumer(new WeakReference<>(this)));

Будет ли это работать как ожидалось?

...