Можно ли сохранять сложный объект со ссылкой на активность в Android ViewModel? - PullRequest
0 голосов
/ 04 октября 2019

Я использую библиотеку, которая использует интерфейс, который я прохожу, для связи с вызывающим действием, проблема в том, что когда я поворачиваю устройство, новый экземпляр действия больше не получает обратный вызов. Я думал, что при сохранении экземпляра этой библиотеки в AndroidViewModel я получу проблему с памятью из-за того, что экземпляр библиотеки ссылается на мою деятельность?

Вызывает проблему при вращении:

public class MainActivity implements Lib.Callback
    {
        private Lib mLib;

        @Override
        public void onCreate ( final Bundle savedInstanceState){
            mLib = new Lib(this);
        }

        @Override
        protected void callback() {
          ...
        }
    }

Будет ли лучше, если я добавлю «mLib» в AndroidViewModel? Или есть лучшая альтернатива для такого случая?

Ответы [ 2 ]

0 голосов
/ 04 октября 2019

Если вы сделаете это, вы потеряете активность. И у тебя все равно останется только старый экземпляр. Не новый. Реализуйте обратный вызов, например, в ViewModel, а затем предоставьте некоторые LiveData из ViewModel, которые может наблюдать действие. Это будет работать на поворот устройства.

0 голосов
/ 04 октября 2019

Получу ли я проблему с памятью из-за того, что экземпляр библиотеки ссылается на мою деятельность?

Сохранение ссылки на библиотеку в ViewModel приведет к утечке памяти для вашего сценария. Как вашУ lib есть ссылка Activity, когда вы поворачиваете свой телефон, в lib будет храниться ссылка о вашей старой активности.

...