Должен ли я сохранить объект подкласса приложения в качестве члена или локальной переменной?
Мне было интересно, я использую подкласс приложения для доступа к некоторым глобальным данным внутри деятельности. И мне было интересно, что будет лучше с точки зрения производительности и памяти.
Лучше ли назначить объект приложения переменной поля в onCreate и обращаться к нему как к mamber
Activity
onCreate() {
mApp = (MyApplication) getApplication()
}
или же
Не используете член и не вызываете getApplication каждый раз и не присваиваете его только локальной переменной?
MyApplication app = (MyApplication) getApplication()
Насколько мне известно, локальные переменные могут быть собраны мусором сразу, но члены должны храниться в памяти.
Поскольку я предполагаю, что объект Application является большим объектом, можно ли хранить его в памяти или разрешить собирать мусор?
Спасибо
1 ответ
Application
объект всегда будет в памяти. Это только ссылка на то, что вы либо кэшируете как член поля, либо извлекаете его каждый раз для локальной переменной. Последнее не дает вам никаких преимуществ в пространстве или времени.
Application
объект вместе со всеми его детьми и внуками объекты будут жить на heap
только. Все, что метод getApplication()
делает, чтобы вернуть address
к root
этого дерева объектов. Размер адреса / указателя / ссылки останется неизменным независимо от длины дерева объекта или его размера.