Intereting Posts
Горизонтальный прокручиваемый текст в Android Настройка фонового и текстового цветов панели инструментов Android в Android Studio 1.4.1 Как добавить представления в пользовательский вид? Как заставить Java-код вызывать String из XML-файла (в Android Studio) NullPointerException в handleStopActivity. Нет ссылки на мой код в трассировке стека. Какой метод вызывается при закрытии приложения Как сохранить приложение в фоновом режиме? Продолжать собирать данные? Горизонтальный прогрессBar: переключение между детерминированными и неопределенными Заголовок панели инструментов с пользовательским представлением Обновление прокрутки триггеров вместо раскрытия панели инструментов Как правильно проверить целостность токена Google? Что произойдет с SharedPreferences при обновлении приложения Android? Не удалось открыть Android 6.0: EACCES (Permission denied) Android снимает фото в секретном режиме Использование кнопки backstack и back в viewpager

Что именно делает onDestroy () уничтожить?

Я был обеспокоен этими «характеристиками»: когда я использую кнопку «Назад» для выхода из своего приложения, я могу сказать, что вызывается onDestroy (), но при следующем запуске моего приложения все статические члены класса Activity по-прежнему сохраняют свои значения. См. Следующий код:

public class HelloAndroid extends Activity { private static int mValue; // a static member here public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView tv = new TextView(this); tv.setText((mValue != 0) ? ("Left-over value = " + mValue) : "This is a new instance"); setContentView(tv); } public void onDestroy() { super.onDestroy(); mValue++; } 

}

Вышеприведенный код отображает значение left-over в mValue, и он увеличивается, когда сеанс заканчивается, поэтому я точно знаю, что вызывается onDestroy ().

Я нашел полезный ответ на этом форуме, и я понимаю, что в приведенном выше коде mValue является членом класса, а не членом экземпляра. Но разве это не правда, что в этом конкретном случае у меня есть только одна активность HelloAndroid, и поэтому, когда он умирает, все очищается, и в следующий раз, когда я вернусь, все начнется снова? (Или, есть ли какая-то другая посторонняя вещь в системе, которая все еще держится за ней после onDestroy (), так что она просто не умрет?)

(Выше всего, просто переменная, что, если это куча ссылок objec? Каждая часть – это отдельная перезаряжаемая память. Есть ли вероятность, что GC собирает некоторые из них, но не все или нет? Это действительно меня беспокоит. )

Solutions Collecting From Web of "Что именно делает onDestroy () уничтожить?"

ОС решает, когда вещи «уходят». onDestroy позволяет вашему приложению иметь окончательный шанс очистить вещи до того, как активность будет уничтожена, но это не означает, что деятельность будет фактически GCed. Вот хорошая статья, которую я рекомендую людям читать, относящуюся к созданию кнопки выхода. Хотя это не совсем то, о чем вы просили, концепции помогут вам понять, что происходит.

Однако у вас есть не только активность. У вас также есть приложение, и его процесс работает в VM Dalvik. Android обычно оставляет приложение, работающее в фоновом режиме, до тех пор, пока ему не потребуется восстановить память, используемую для какого-либо другого приложения. Ваш статический член должен оставаться в памяти до тех пор, пока процесс выполняется. Если вы попытаетесь запустить какое-то приложение с интенсивной памятью или принудительно закрыть запущенное приложение с помощью некоторого диспетчера задач, вы можете увидеть статическое значение сброса.