Передать параметр WeakReference <View>в метод ViewModel? - PullRequest
0 голосов
/ 31 мая 2019

Наши команды обсуждают, следует ли передавать параметр WeakReference<View> в метод ViewModel или нет. Я вижу в документе Google сказал,

Примечание. Поскольку ViewModel переживает конкретные действия и экземпляры фрагментов, он никогда не должен ссылаться на View или любой класс, который может содержать ссылку на контекст действия. Если ViewModel нужен контекст приложения (например, для поиска системной службы), он может расширить класс AndroidViewModel и иметь конструктор, который получает приложение в конструкторе (поскольку класс приложения расширяет контекст).

Как насчет того, чтобы использовать WeakReference<View> для передачи view в viewmodel? WeakRef может предотвратить утечку памяти, однако некоторые участники сказали, что это затруднит чтение / поддержку кода. Некоторые ребята предлагают использовать интерфейс ViewInf, а View будет реализован для ViewInf, и использование метода в viewmodel будет таким.

    fun methodA(viewInf: WeakReference<ViewInf>)() {
        doSomeBackgroundThread(viewInf)
    }

Мы хотим использовать это представление для рисования на растровом изображении и использовать растровое изображение для сохранения в memcache.

1 Ответ

0 голосов
/ 31 мая 2019

Предупреждающая заметка от Google имеет смысл, поскольку ViewModel не должен делать ничего, кроме транспортных данных.

Иногда мы настолько погружаемся в «объектно-ориентированную» часть проекта, что забываем, что доменные объекты и объекты инфраструктуры приложения должны взаимодействовать только для извлечения данных или введения данных в приложение для обработки.

...