Должен ли я сохранить объект подкласса приложения в качестве члена или локальной переменной?

Мне было интересно, я использую подкласс приложения для доступа к некоторым глобальным данным внутри деятельности. И мне было интересно, что будет лучше с точки зрения производительности и памяти.

Лучше ли назначить объект приложения переменной поля в onCreate и обращаться к нему как к mamber

Activity

 onCreate() {
     mApp = (MyApplication) getApplication()
 }

или же

Не используете член и не вызываете getApplication каждый раз и не присваиваете его только локальной переменной?

MyApplication app = (MyApplication) getApplication()

Насколько мне известно, локальные переменные могут быть собраны мусором сразу, но члены должны храниться в памяти.

Поскольку я предполагаю, что объект Application является большим объектом, можно ли хранить его в памяти или разрешить собирать мусор?

Спасибо

1 ответ

Решение

Application объект всегда будет в памяти. Это только ссылка на то, что вы либо кэшируете как член поля, либо извлекаете его каждый раз для локальной переменной. Последнее не дает вам никаких преимуществ в пространстве или времени.


Application объект вместе со всеми его детьми и внуками объекты будут жить на heap только. Все, что метод getApplication() делает, чтобы вернуть address к root этого дерева объектов. Размер адреса / указателя / ссылки останется неизменным независимо от длины дерева объекта или его размера.

Другие вопросы по тегам