2011-02-07 10 views
41

llamo finish() pero mi actividad sigue en marcha.Finalizar llamada() en una actividad de Android realmente no termina

Tengo una actividad que es invocada por un menú de la pantalla de actividad principal. En el método de mi actividad onCreate() Tengo el siguiente fragmento de código:

// Make sure there are some events in the list. 
    if (theEventArrayList.isEmpty()){ 
     Toast.makeText(this, "Event List is empty", Toast.LENGTH_LONG).show(); 
     finish(); 
    } 
    SummarizeCurrentEvent(); 
    graphEvents(); 

Si la lista está vacía se pone el pan tostado, y puedo establecer punto de interrupción en la llamada a finish(). Si paso de eso en el depurador va directamente al SummarizeCurrentEvent(). Pensé que finish() saldría de la actividad. ¿No es este el caso? ¿Dónde puedo encontrar más información sobre este método?

Respuesta

65

Debería poner una declaración return después de eso finish, porque el método que llamó finish se ejecutará completamente de lo contrario.

también, ver a esta pregunta: about finish() in android

+1

¿No sería mejor poner 'SummarizeCurrentEvent(); graphEvents(); ... 'en un bloque' else {} '? –

+0

@ ban-geoengineering Usted podría tener múltiples '' if (...) {finish(); regreso; } ''. Creo que es un buen hábito explícitamente '' finish() '' ** y ** '' return'' cuando hay un código siguiente. –

0

Finish finaliza la actividad, pero depende del ciclo principal realizar cualquier interacción de UI. Tienes que esperar hasta que se ejecute el bucle UI, que es después de que regreses desde onCreate.

5

acabado() simplemente le dice a la actividad para hacer lo que tiene que hacer para terminar, por ejemplo. shutdown, invocar onPause, informar resultado al padre, etc. No hace una llamada exit() ni nada.

Debe regresar después de la llamada a finish().

3

Agregando a las otras respuestas, todavía se puede tiene (Re)onStart, onResume y invocado.

Lo digo porque en el siguiente enlace, hay una tabla que dice que para matar una actividad, primero se invoca onPause (y probablemente, pero no se garantiza) en Stop y onDestroy.

Referencia Activity

0

Este es el caso en el que se debe utilizar la declaración try...catch.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    try { 
     //...some initialization... 

     // Make sure there are some events in the list. 
     if (theEventArrayList.isEmpty()){ 
      throw new Exception("Event List is empty"); 
     } 
     SummarizeCurrentEvent(); 
     graphEvents(); 
    } catch (Exception e) { 
     Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); 
     finish(); 
    } 
} 
Cuestiones relacionadas