¿Cómo finalizar completamente la aplicación desde cualquier activity?

publicado por: Anonymous

Tengo una aplicación la cual quiero que se pueda finalizar completamente desde cualquier actividad y que esta no quede en segundo plano.
La aplicación va a constar de 5 Activity’s. En la tercera activity tengo el siguiente código.

@Override
protected void onDestroy() {

    Log.i(TAG,"Me destrulleron");
    super.onDestroy();
    android.os.Process.killProcess(android.os.Process.myPid());
}

@Override
public void onBackPressed() {
    if(this.tiempoPrimerClick + INTERVALO > System.currentTimeMillis()){
        finish();
        return;
    }else{
        Toast.makeText(this,"Vuelve a precionar para salir", Toast.LENGTH_SHORT).show();
    }
    tiempoPrimerClick = System.currentTimeMillis();
}

El cual me termina la tercera Actividad y la segunda Actividad pero me deja en el MainActivity.

En la segunda actividad tengo el siguiente código

  @Override
protected void onDestroy() {

    Log.i(TAG,"Me destrulleron");
    super.onDestroy();

    android.os.Process.killProcess(android.os.Process.myPid());
} @Override
public void onBackPressed() {

    if(this.tiempoPrimerClick + INTERVALO > System.currentTimeMillis()){
        finish();

        return;
    }else{
        Toast.makeText(this,"Vuelve a presionar para salir", Toast.LENGTH_SHORT).show();
    }
    tiempoPrimerClick = System.currentTimeMillis();
}

Estando en esta actividad si la aplicación se cierra y se termina el proceso.

Ahora en el MainActivity tengo el siguiente código:

@Override
protected void onDestroy() {
    super.onDestroy();
    android.os.Process.killProcess(android.os.Process.myPid());
}

Aun me encuentro revisando porqué en la tercera activity la aplicación no se cierra completamente. Sería de gran ayuda si me echan una mano.

solución

A partir de la versión >= API 16 puedes usar finishAffinity() pero existe una alternativa que funciona en >= API 11

Método alternativo

El método es cargar una Actividad encima de todas las demás eliminando su pila, y después cerrarla definitivamente.

Cada vez que quieras salir de todas las Actividades abiertas, al evento onBackPressed de todas ellas poner

Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);

y en el MainActivity.java capturar si hay un intent con valor de EXIT para así finalizar la aplicación en totalidad.

if (getIntent().getBooleanExtra("EXIT", false)) {
    finish();
}

Adaptado de las respuestas SO y SO

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *