2012-06-18 14 views
12

Tengo 4 actividades, por ejemplo Act1, Act2, Act3 y Act4. Un botón en Act1 abre Act2, un botón en Act2 abre Act3, un botón en Act3 abre Act4.Salir/Terminar una aplicación/actividad - android

quiero dos cosas por hacer:

  1. Tengo un botón en Act4 que dirige al usuario a Act1, la prob es cuando el usuario hace clic de nuevo en Act1, quiero cerrar la aplicación en lugar de abrir el Act4 ..

  2. Tengo la opción en el menú 'salir' en todas las actividades cuando el usuario lo elija, quiero cerrar la aplicación en lugar de volver a la actividad anterior.

Probado usando finish(); pero no cumplió con mis requisitos.

+0

[Prueba esta respuesta] (http://stackoverflow.com/a/5140545/940096) – Praveenkumar

+0

puede encontrar su respuesta aquí ............. [verifique esto ..........] [1] [1]: http://stackoverflow.com/questions/11077020/exiting-an-android-application-on-back-button/11077196#11077196 – Anu

+0

No había casi duplicado exacto preguntado hace algún momento del día [ aquí] (http://stackoverflow.com/q/11077020/368070) Yo recomendaría leer [esta publicación] (http://stackoverflow.com/questions/2033914/quitting-an-application-is-that-frowned- upon/2034238 # 2034238) para entender por qué no debes implementar lo que estás intentando. – gideon

Respuesta

25

uso por debajo de código en su Act4 'th Menu.xml' s botón de salida -

Intent intent = new Intent(Act4.this, Act1.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.putExtra("EXIT", true); 
startActivity(intent); 

Y, en el método de su primera actividad onCreate() sólo hay que poner el código de abajo -

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

Esto hará salir de la aplicación

+0

Incluso si llama a finish(), se llamará independientemente a su método super.onCreate(). Y luego Android puede restablecer toda tu pila de actividades si no tienes cuidado. –

+0

@IgorG. Entonces, ¿cuál es la mejor manera de terminar esto? – Praveenkumar

+0

Tu camino es bueno. Pero digo que tenga cuidado, que si hay un super.onDestroy() o super.onCreate() pendiente, se los llamará después de llamar a finish(). Y es entonces cuando puede tener un comportamiento no deseado si ha subclasificado la actividad de otra actividad onCreate() o onResume(). –

6

Salida este enlace:

Click here

que puede utilizar:

@Override 
public void onBackPressed() 
{ 
    moveTaskToBack(true); 
} 

en todas las actividades para cerrar la aplicación.

+0

Hola, ¿has probado esto antes? Porque, no saldrá de la aplicación. Simplemente ejecuta la aplicación en segundo plano – Praveenkumar

+0

Ok. He dado un enlace. Verifique todas las respuestas sobre eso. –

+3

Esto no sale de la aplicación. Mueve la tarea al fondo. Si el usuario luego presiona prolongadamente la tecla INICIO y selecciona esta aplicación, volverá al primer plano con las actividades aún en la tarea como estaban antes. –

1

acabado actividad anterior cuando se está de ir a la siguiente actividad significa escribir finish(); después startactivity(intent); y escribir código para a continuación iniciar la primera actividad del evento de clic de botón cuarta de la actividad.

Intent in1=new Intent(Act4.this, Act1.class); 
startActivity(in1); 
finish(); 

Y escriba a continuación el código en el evento Click Button de su salida en todas las actividades.

finish(); 
0

El método que utilizo es empezar a todas las actividades del niño con startActivityForResult. Luego puedo poner Extra ("STATE", some_value) al salir de cualquier niño y usar el valor de estado para determinar qué hacer con los padres.

Si quiero salir de la aplicación de un niño profundo, "ESTADO" sería "salir" y cada niño en la jerarquía simplemente obtendría el StringExtra para "salir", hacer un putExtra ("ESTADO", "salir ") y call finish() y luego la aplicación llamaría a finish() al final. Puede usar esto para lograr cualquier estado deseado.

El uso de startActivityForResult para pasar mensajes de esta manera evita tener que pasar referencias torpes a las actividades secundarias y simplifica su enfoque para establecer el estado deseado de la aplicación.

0

Si tiene otra actividad detrás (en la pila de actividad de la aplicación), puede usar finish() para salir de la actividad actual.

Sin embargo, la función back también supone eliminar la actividad actual de la pila de actividad de la aplicación.

En mi experiencia, es muy poco confiable confiar en las actividades en la pila posterior (en la pila de actividades de la aplicación). Por eso solía salir de cada actividad cuando profundizo.

En su caso:

Act 1 -> exit -> Act 2 -> exit -> Act 3 -> exit -> Act 4 -> exit -> Act 1 -> exit 

El método anterior se cerrará todas las actividades.

Sin embargo, si desea ejecutar un código en segundo plano, es mejor confiar en un "Servicio" en lugar de una "Actividad". Puede dejar que el "Servicio" salga después de realizar su trabajo asignado.

0
Do a 
<code> 

try 
{ 
finalize(); 
finish 
} 
catch(Exception error) 
{ 
error.printStackTrace(); 
} 
//This would exit your App neatly 
</code> 
-1

bandeja éste

Intent intent =new Intent(MainActivity.this, ClassName.class); 
    finish 
startActivity(intent); 
-1

inicio Activity1 usando intención y trate de llamar finishAffinity() en onBackPressed() de Activity1.

2
Intent intent = new Intent(Act4.this, Act1.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(intent); 

Borre el indicador antes de volver a la actividad anterior. Puede ser que te ayude.

0

Uso este método:
1. Cree actividad estática en la primera actividad que cerrará las actividades restantes .
2. Luego llámelo en el método estático de esta manera, cerrará la aplicación desde donde sea que la llame.

public static Activity activity; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    activity=this; 
} 
public static void CloseApp(){ 
    activity.finish(); 
} 
0

Uso android:noHistory = "true" en su archivo AndroidManifest.xml

<activity 
     android:name=".Act1" 
     android:noHistory="true" /> 
    <activity 
     android:name=".Act2" 
     android:noHistory="true" /> 
    <activity 
     android:name=".Act3" 
     android:noHistory="true" /> 
    <activity 
     android:name=".Act4" 
     android:noHistory="true" /> 
0

lugar este código en su aplicación ...

  moveTaskToBack(true); 
      android.os.Process.killProcess(Process.myPid()); 
      System.exit(1); 
Cuestiones relacionadas