2011-01-24 3 views
29

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

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

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

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

+0

Что именно вы ищете? Чтобы закончить текущую деятельность на задней панели? –

ответ

36

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

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if ((keyCode == KeyEvent.KEYCODE_BACK)) 
    { 
     finish(); 
    } 
    return super.onKeyDown(keyCode, event); 
} 
+1

В чем смысл? Нажатие кнопки «Назад» автоматически перейдет в стек активности. 'finish()' просто гарантирует, что вы не сможете вернуться. (Тем не менее, вопрос, по общему признанию, расплывчатый.) – EboMike

+2

, конечно, но активность убита не является уверенным при нажатии кнопки «назад», поэтому важно убить финиш, и это то, что было задано, но поскольку освобождение памяти происходит автоматически, OS – ingsaurabh

+2

Абсолютно нет. Если активность не находится впереди, она может быть восстановлена ​​ОС. Закончено или нет. – EboMike

4

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

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

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

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

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

6

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

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

Пожалуйста, see here за отличную рецензию на эту тему.

+7

Если активность использует много ресурсов, то почему бы не убить ее изнутри приложения, а не ждать GC? Это целый процесс, который должен пройти, и, следовательно, замедляет работу телефона. Хорошее управление памятью делает все попытки управлять им в самой программе. Именно поэтому большинство управляемых языков программирования и ide автоматически вставляют код самообучения в программу, а также причину, по которой вы предоставляете жизненный цикл, чтобы вы могли управлять памятью наилучшим образом из своего приложения. – Shaun

+1

Shaun прав, хорошее управление памятью делает все попытки управлять им в самой программе. – dns

61

Простой Override onBackPressed Метод:

@Override 
    public void onBackPressed() { 
      super.onBackPressed(); 
      this.finish(); 
    } 
13
public boolean onKeyDown(int keycode, KeyEvent event) { 
    if (keycode == KeyEvent.KEYCODE_BACK) { 
     moveTaskToBack(true); 
    } 
    return super.onKeyDown(keycode, event); 
} 

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

+0

он работает, спасибо – Mohsen

+0

Его работа, но приложение открыта на одной странице всегда, когда приложение не убито –

+0

, но вы хотите запустить приложение в Launcher actiivity –