Как убить активность при нажатии кнопки «Назад»? - PullRequest
31 голосов
/ 24 января 2011

Я получил Activity, которая при запуске загружает изображение из Интернета. В целях экономии памяти, когда действие остается после нажатия кнопки «назад», я хочу, чтобы действие сбрасывало все данные, то есть избавлялось от всех строк и изображений, которые в нем находятся. Я подумал, что лучший способ сделать это - просто убить активность.

Ну, я не могу понять обратный вызов, когда нажата кнопка Назад. Итак, я пытался использовать для этой задачи обратные вызовы onPause() и onStop(), но оба способа принудительно закрывали мое приложение. Вот код:

public void onPause() {
    this.finish();
}
public void onStop() {
    finish();
}

Я пробовал несколько вариантов этого, но ни один из них, похоже, не работал. Есть идеи?

Ответы [ 5 ]

69 голосов
/ 29 февраля 2012

Метод простого переопределения onBackPressed:

    @Override
    public void onBackPressed() {
            super.onBackPressed();
            this.finish();
    }
39 голосов
/ 24 января 2011

добавить это к вашей деятельности

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    if ((keyCode == KeyEvent.KEYCODE_BACK))
    {
        finish();
    }
    return super.onKeyDown(keyCode, event);
}
13 голосов
/ 08 мая 2012
public boolean onKeyDown(int keycode, KeyEvent event) {
    if (keycode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
    }
    return super.onKeyDown(keycode, event);
}

Мое приложение закрыто с кодом выше.

7 голосов
/ 24 января 2011

Прежде всего, finish() не разрушает ваш процесс и не освобождает память. Он просто удаляет активность из стека активности. Вам нужно было бы прекратить процесс, на который есть ответы на несколько вопросов (так как он задается несколько раз).

Но правильный ответ - Не делайте этого. ОС Android автоматически освобождает память, когда ей требуется память. Не освобождая память, ваше приложение запустится быстрее, если пользователь вернется к нему.

Пожалуйста, , см. Здесь , для отличной рецензии на тему.

5 голосов
/ 24 января 2011

Что ж, если вы изучите структуру того, как работает жизненный цикл приложения, здесь , то вы поймете, что onPause() вызывается, когда другая деятельность получает фокус, и onStop()вызывается, когда активность больше не видна.

Из того, что я узнал, вы можете вызывать finish() только из активности, которая активна и / или имеет фокус.Если вы вызываете finish() из метода onPause(), это означает, что вы вызываете его, когда действие больше не активно.таким образом, генерируется исключение.

Когда вы звоните finish() из onStop(), то действие отправляется в фоновый режим, поэтому больше не будет видимо, тогда это исключение.

Когда вы нажимаете кнопку back, вызывается onStop().

Скорее всего, Android автоматически сделает для вас то, что вы в данный момент хотите сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...