Ответ 1
добавьте это в свою деятельность
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ((keyCode == KeyEvent.KEYCODE_BACK))
{
finish();
}
return super.onKeyDown(keyCode, event);
}
У меня есть действие, которое, когда оно начинается, загружает изображение из Интернета. Чтобы сохранить память, когда активность нажата клавишей "Назад", я хочу, чтобы активность давала все данные, которые избавляются от всех строк и изображений, которые находятся в ней. Я решил, что лучший способ сделать это - просто убить деятельность.
Ну, я не могу понять, как обратный вызов при нажатии кнопки "Назад". Итак, я пытался использовать обратные вызовы onPause()
и onStop()
для этой задачи, но оба способа заставляют закрыть мое приложение. Вот код:
public void onPause() {
this.finish();
}
public void onStop() {
finish();
}
Я пробовал несколько вариантов этого, но никто из них, похоже, не работал. Есть идеи?
добавьте это в свою деятельность
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ((keyCode == KeyEvent.KEYCODE_BACK))
{
finish();
}
return super.onKeyDown(keyCode, event);
}
Простое переопределение метода onBackPressed:
@Override
public void onBackPressed() {
super.onBackPressed();
this.finish();
}
public boolean onKeyDown(int keycode, KeyEvent event) {
if (keycode == KeyEvent.KEYCODE_BACK) {
moveTaskToBack(true);
}
return super.onKeyDown(keycode, event);
}
Мое приложение закрыто вышеуказанным кодом.
Прежде всего, finish()
не уничтожает ваш процесс и освобождает память. Он просто удаляет активность из стека действий. Вам нужно будет убить процесс, на который отвечает куча вопросов (поскольку это задается несколько раз).
Но правильный ответ - Не делайте этого. ОС Android автоматически освободит память, когда ему понадобится память. Не освобождая память, ваше приложение запустится быстрее, если пользователь вернется к нему.
Пожалуйста, см. здесь за отличную рецензию на эту тему.
Хорошо, если вы изучите структуру того, как работает жизненный цикл приложения, здесь, то вы узнаете, что onPause()
вызывается, когда другая активность получает фокус, а onStop()
вызывается, когда активность больше не видна.
Из того, что я еще узнал, вы можете вызвать finish()
только из активности, которая активна и/или имеет фокус. Если вы вызываете finish()
из метода onPause()
, что означает, что вы вызываете его, когда активность больше не активна. поэтому вызывается исключение.
Когда вы вызываете finish()
из onStop()
, тогда действие отправляется в фоновый режим, поэтому оно больше не будет видимым, а затем это исключение.
Когда вы нажимаете кнопку back
, вызывается onStop()
.
Скорее всего, Android автоматически сделает для вас то, что вы сейчас хотите делать.