Страницы

Поиск по вопросам

понедельник, 24 февраля 2020 г.

Почему нельзя сохраннять Activity в статическом объекте, при пересоздании

#android


На официальном сайте Android'a имеется статья, где рекомендуется сохранять объемные
объекты (а точнее их ссылки) изActivity, на время пересоздания, в фрагменте (который
не имеет UI и не пересоздается).

Но я все же не могу понять: а почему нельзя использовать для тех же целей синглтоны?
Получить его можно из любого экземпляра Activity (ссылки он, вроде как, тоже не теряет
:)), так в чем же проблемы и почему это не является самым простым способом сохранения?
    


Ответы

Ответ 1



Можно в Singleton, с одной поправкой: надо использовать естественный синглтон Android'а класс Application, который в любом месте можно получить через getApplication(). Технически надо создать собственный класс: public class MyApplication extends Application { private MyData myData; private static MyApplication me; public MyApplication() { me=this; } public static MyApplication getApplication() { return me; } public MyData getMyData() { return myData; } } Теперь в любом месте можно вызвать: MyApplication.getApplication().getMyData(); или через контекст (если не нравится) ((MyApplication )context.getApplication()).getMyData(); P.S. Надо не забыть задекларировать MyApplication в манифесте.

Ответ 2



Можно и в Singleton сохранять. Они имеют ввиду хранить данные, которые нужны только конкретной активити. Если использовать Singleton, то вам придется следить, чтобы эти данные удалялись по уничтожению данной активити. А если использовать retain fragment то этого делать не надо будет.

Комментариев нет:

Отправить комментарий