Intereting Posts
Андроид: капитализировать не работает Как реализовать приложения Android-приложения с подстановочными доменами? Android управляет фрагментами из активности элегантно Как использовать DatePickerDialog как предпочтение Где я могу найти все созданные Android темы Как сбросить рейтинги Google Play Games до публикации? Расширение FrameLayout, дочерние представления больше не будут отображаться Как изменить программный цвет фона элементов панели действий Вызов метода фрагмента из родительской активности Android CheckJNI для Android: как отключить / включить (на эмуляторе)? Документация кажется ошибочной Производительность Fragmenttabhost медленная? Ограничить Android-виджет на один экземпляр на устройство Как создать задержку в 1 секунду перед установкой альфы Просмотр? Как получить отчет о покрытии jacoco с помощью плагина Android gradle 0.10.0 или новее? Как добавить дополнительный язык для Android?

Что именно делает 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 обычно оставляет приложение, работающее в фоновом режиме, до тех пор, пока ему не потребуется восстановить память, используемую для какого-либо другого приложения. Ваш статический член должен оставаться в памяти до тех пор, пока процесс выполняется. Если вы попытаетесь запустить какое-то приложение с интенсивной памятью или принудительно закрыть запущенное приложение с помощью некоторого диспетчера задач, вы можете увидеть статическое значение сброса.