Активность OnDestroy никогда не называется?
Я использую следующий код в моей ListActivity
// a separate class in project
public class MyActivity extends ListActivity {
// some common functions here..
}
public class SelectLocation extends MyListActivity {
public void onCreate(Bundle savedInstance) {
// here.....
}
@Override
protected void onDestroy() {
super.onDestroy();
if (adap != null) adap = null;
if (list != null) list = null;
System.gc();
}
}
кто-нибудь ведет меня, почему onDestroy
метод не вызывается в моем коде?
3 ответа
onDestroy()
вызывается только тогда, когда в системе недостаточно ресурсов (памяти, процессорного времени и т. д.) и принимает решение об удалении вашей активности / приложения или когда кто-то вызывает finish()
на вашей деятельности.
Таким образом, чтобы проверить ваш код (), вы можете сделать тестовую кнопку, которая будет вызывать finish()
на вашей деятельности.
Узнайте больше здесь.
Кроме того, я считаю, что вам не нужно называть все эти вещи в onDestroy()
пока адаптация не является критическим ресурсом. И даже в этом случае система Android имеет механизмы для правильной их утилизации.
Нет никакой гарантии, что ваш метод onDestroy будет вызван вообще.
Код, который вы используете в своем методе onDestroy, совсем не нужен. Если вызывается destroy, ваша активность будет удалена из стека и в любом случае свободна для сбора мусора со всеми ресурсами в нем, на которые ссылается только действие. Также System.gc() должен быть плохим стилем. На Android система почти всегда знает, когда лучше всего собирать мусор. В большинстве случаев операция завершается, сбор мусора запускается автоматически. Просто удалите весь метод onDestroy. Если у вас есть проблемы с общей памятью вашего приложения, проблема в другом месте.
В большинстве телефонов при нажатии кнопки "Назад" дважды вызывается метод onStop() и onDestroy(), но если это не ваш случай, вы можете создать кнопку для вызова метода finish(); метод.