Мне нужно уточнить, как лучше всего управлять конкретным сценарием с использованием RxJava2 (на нем основана вся структура приложения):
В моем приложении многие люди могут вносить изменения в один и тот же документ, поэтому мне нужно донести каждое изменение до всех, кто просматривает документ. Но этот объект очень сложный и тяжелый, поэтому мне нужно удалить его из памяти, когда его закроет последний человек. И еще: документ может быть дочерним по отношению к другому документу, поэтому каждое изменение в родительском документе должно быть отправлено всем дочерним.
Что я сделал до сих пор: я создал менеджера, поэтому каждый запрос документа приходит к нему. Всякий раз, когда кому-то нужно поработать с документом, я смотрю на карте, открыт ли документ. Если это не так, я создаю экземпляр BaseDocument, который получает данные из документа, и PublishSubject для распространения событий и добавления их на эту карту. Затем я подписываюсь на наблюдателя пользователя на PublishSubject, чтобы получить изменения. Всякий раз, когда пользователю нужно что-то изменить, он отправляет изменение в BaseDocument, вносит изменение и отправляет новую версию всем через onNext(). Все идет нормально.
Моя проблема в том, что я не могу контролировать, когда кто-то удаляет наблюдатель документа, поэтому я не могу контролировать, когда документ больше не нужен, поэтому я могу сохранить любые несохраненные изменения и уничтожить объект. Я не могу найти список подписки или что-то подобное, кроме «hasObservers ()», и я не хочу добавлять таймер, чтобы опросить его, чтобы закрыть, если все сделано.
Моим «чудесным ответом» был бы обратный вызов, который вызывается, когда последний подписчик избавляется, поэтому я мог бы просто убрать дом и выбросить весь объект, но я не могу найти ничего подобного. Итак, как я могу управлять подписками?
PublishSubject
какObservable
сdoOnDispose
иshare
, чтобы вас вызывали, когда последний наблюдатель удаляется. - person akarnokd   schedule 01.02.2018