Я начал играть с Android JetPack (ViewModel, Компоненты архитектуры, LIfeCycle и так далее).До сих пор я работал с архитектурой Model View Presenter, и на самом деле я обнаружил, что довольно легко тестировать и поддерживать архитектуру.
С другой стороны, большое преимущество, которое я вижу, используя вместо этого ViewModels, заключается в ихродная связь с жизненным циклом «Деятельности» и «Фрагменты», которая всегда была одной из самых больших проблем для разработчика Android, поэтому я думаю, что это очень большой шаг вперед.
Сказав, что, я думаю, есть большое разочарование:В этом новом подходе кажется гораздо сложнее вызывать методы Activity или Fragment, потому что, как указано в официальных документах
ViewModel никогда не должна ссылаться на представление, жизненный цикл или любой класс, который может содержатьссылка на контекст действия.
В подходе MVP Presenter имел контракт с представлением и мог вызывать все его методы.Я провел некоторое исследование о том, как решить этот сценарий с помощью компонентов Архитектуры, но кажется, что нет простого и безболезненного способа сделать это: в конце вы всегда должны обрабатывать состояния в ViewModel и реагировать на эти изменения в Деятельности и Фрагментах.Кто-то предлагает использовать SingleLiveEvent класс, который делает его немного легче, но все же намного более болезненным, чем раньше.
Поэтому мой вопрос:
В документах говорится, что выне может ссылаться на что-либо, содержащее ссылку на Контекст Деятельности (я полагаю, чтобы избежать утечек памяти), но что, если я сделаю это, и тогда я очищу все ссылки в onCleared () ViewModel?