Intereting Posts
Android – Как динамически изменять текст пункта меню за пределами onOptionsItemsSelected или onCreateOptionsMenu У меня возникли проблемы с добавлением OpenCV в новый Android-проект Какова цель requestWindowFeature ()? Производительность Android HttpClient Передайте данные реферера через хром, чтобы играть в Google Как я могу активировать кнопку «Вверх» моей ActionBar, как кнопка «Назад» телефона? Как отправить простую электронную почту программно? (Существует простой способ сделать это?) Android Data Binding @BindingConversion failure для int для строки Явное намерение Android с целевым компонентом Как добавить фоновое изображение в действие? Обновление библиотеки поддержки Android до 23.2.0 вызывает ошибку: XmlPullParserException Бинарная строка XML-файла # 17 <vector> требует viewportWidth> 0 Как заставить панель действий быть внизу в ICS? Установите Drawable или Bitmap как значок в уведомлении на Android Преобразование списка в массив в Java Как получить идентификатор facebook для контактов или URL-адреса от родных контактов / разрешения контента?

Как убить действие при нажатии кнопки «Назад»?

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

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

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

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

Solutions Collecting From Web of "Как убить действие при нажатии кнопки «Назад»?"

Добавьте это в свою деятельность

 @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() получает фокус, а onStop() вызывается, когда активность больше не видна ,

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

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

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

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