Intereting Posts
Android: вызов super () в начале или конце onStart (), onStop (), onDestroy () в активности? Android: запуск службы при загрузке, но не запуск графического интерфейса Какая минимальная ширина экрана в Android? Получить только номер мобильного телефона Как сделать по выбранному элементу не автоматически выбрать первую запись Android: изменение размера только частей изображения с помощью мягкой клавиатуры на экране Android получает нормализованное ускорение Как получить пользовательские данные из уведомления об атак из android? Android-устройство, не получающее многоадресный пакет Есть ли в Android стандартный справочный документ / руководство? Список всех действий в нашем приложении, работающих на устройстве Изменить порядок содержимого для eclipse для разработки Android Android делает номера телефонов доступными, автоопределяет ViewStub vs. View.GONE Mailto: ссылки не поддерживаются в 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 собирает некоторые из них, но не все или нет? Это действительно меня беспокоит. )

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

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