¿Cómo matar una aplicación con todas sus actividades?

Posible duplicado:
¿Dejar una aplicación – es que frunció el ceño?

Quiero ofrecer al usuario una opción para salir de la aplicación, ya que necesito borrar algunos datos confidenciales, que se almacena en SharedPreferences siempre y cuando la aplicación lo necesite.

Tan pronto como el usuario quiera salir, la contraseña en SharedPreferences debe ser borrada y por supuesto todas las actividades de la aplicación deben ser cerradas (no tiene sentido ejecutarlos sin la contraseña conocida – se bloquearían).

¿Cómo puedo hacer eso?

System.exit(0) y finish() sólo salen de la actividad actual – inútil. Sé que hay una aplicación taskmanager. ¿Cómo está haciendo eso? Es capaz de matar a toda la aplicación …

Cuando utiliza el método finish (), no cierra el proceso completamente, todavía está funcionando en segundo plano.

Por favor, utilice este código en la Actividad Principal (Por favor, no use en todas las actividades o sub Actividades):

 @Override public void onBackPressed() { android.os.Process.killProcess(android.os.Process.myPid()); // This above line close correctly } 

Está correcto: llamar a finish() sólo saldrá de la actividad actual, no de toda la aplicación. Sin embargo, hay una solución para esto:

Cada vez que inicie una actividad, startActivityForResult(...) usando startActivityForResult(...) . Cuando quieras cerrar la aplicación completa, puedes hacer algo como esto:

 setResult(RESULT_CLOSE_ALL); finish(); 

A continuación, definir la devolución de llamada onActivityResult(...) cada actividad, cuando una actividad devuelve el valor RESULT_CLOSE_ALL , también llama a finish() :

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch(resultCode) { case RESULT_CLOSE_ALL: setResult(RESULT_CLOSE_ALL); finish(); } super.onActivityResult(requestCode, resultCode, data); } 

Esto causará un efecto de cascada que cierra todas las actividades.

También, apoyo a CommonsWare en su sugerencia: almacenar la contraseña en una variable para que se destruya cuando se cierra la aplicación.

Cuando el usuario desea salir de todas las actividades abiertas, debe presionar un botón que carga la primera actividad que se ejecuta cuando se inicia la aplicación, en mi caso "LoginActivity".

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

El código anterior borra todas las actividades excepto LoginActivity. LoginActivity es la primera actividad que aparece cuando el usuario ejecuta el programa. A continuación, coloque este código dentro de la onCreate de LoginActivity, para indicar cuándo debe autodestruirse cuando se pasa el mensaje 'Exit'.

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

La respuesta a esta pregunta de la plataforma Android es: "No haga un botón de salida, termine las actividades que el usuario ya no desea y el Administrador de actividades las limpia como mejor le parezca".

Que se almacena en el SharesPreferences siempre y cuando la aplicación lo necesite.

¿Por qué?

Tan pronto como el usuario quiera salir, la contraseña en SharedPreferences debe ser borrada y por supuesto todas las actividades de la aplicación deben ser cerradas (no tiene sentido ejecutarlos sin la contraseña conocida – se bloquearían).

Incluso mejor: no ponga la contraseña en SharedPreferences . Sosténgase en él en un miembro de datos estáticos. Los datos desaparecerán cuando todas las actividades de la aplicación salgan (p. Ej., Botón BACK) o destruidas de otra manera (por ejemplo, expulsadas de la memoria RAM para dejar espacio para otras actividades en algún momento después de que el usuario presione HOME).

Si desea algún tipo de "contraseña de descarga" proactiva, simplemente establezca el miembro de datos estáticos en null y haga que sus actividades lo comprueben y tomen la acción apropiada cuando es null .

Uso del método onBackPressed() :

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

O usar el método finish() , tengo algo como

 //Password Error, I call function Quit(); protected void Quit() { super.finish(); } 

Con super.finish () se cierra la actividad de la superclase.

Mi comprensión del marco de aplicación de Android es que esto no está específicamente permitido. Una aplicación se cierra automáticamente cuando no contiene más actividades actuales. Tratar de crear un botón de "matar" es aparentemente contrario al diseño previsto del sistema de aplicación.

Para obtener el tipo de efecto que desea, puede iniciar sus diversas actividades con startActivityForResult () y hacer que el botón de salida envíe un resultado que le indica a la actividad principal que termine (). Esa actividad podría enviar el mismo resultado como parte de su onDestroy (), que se convertiría en cascada de nuevo a la actividad principal y resultaría en ninguna actividad en ejecución, lo que debería hacer que la aplicación se cierre.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.