ventanas todas segundo plano para las cómo como cerrar automaticamente app aplicaciones abiertas android

todas - Cómo cerrar la aplicación de Android?



como cerrar ventanas en android (21)

¡SÍ! Sin dudas, puede cerrar su aplicación para que ya no se ejecute en segundo plano. Al igual que otros han comentado finish() es la forma recomendada por Google que realmente no significa que su programa esté cerrado.

System.exit(0);

Eso cerrará la aplicación y no dejará nada en segundo plano. Sin embargo, utilícela sabiamente y no deje archivos abiertos, los identificadores de la base de datos abiertos, etc. Estas cosas se limpiarían normalmente con el comando finish() .

Personalmente ODIO cuando elijo Salir en una aplicación y realmente no sale.

Quiero cerrar mi aplicación para que no se ejecute en segundo plano.

¿Como hacer eso? ¿Es esta una buena práctica en la plataforma Android?

Si confío en el botón "volver", cierra la aplicación, pero permanece en segundo plano. Incluso hay una aplicación llamada "TaskKiller" solo para matar esas aplicaciones en segundo plano.


Android tiene un mecanismo para cerrar una aplicación de forma segura según su documentación. En la última actividad que se sale (normalmente la actividad principal que apareció por primera vez cuando se inició la aplicación) simplemente coloque un par de líneas en el método onDestroy (). La llamada a System.runFinalizersOnExit (true) garantiza que todos los objetos se finalicen y que se recoja la basura cuando la aplicación finalice. También puede matar una aplicación rápidamente a través de android.os.Process.killProcess (android.os.Process.myPid ()) si lo prefiere. La mejor manera de hacer esto es poner un método como el siguiente en una clase de ayuda y luego llamarlo cuando la aplicación necesite ser eliminada. Por ejemplo, en el método de destrucción de la actividad raíz (suponiendo que la aplicación nunca mata esta actividad):

Además, Android no notificará a una aplicación del evento clave INICIO , por lo que no podrá cerrar la aplicación cuando se presione la tecla INICIO . Android reserva el evento clave HOME a sí mismo para que un desarrollador no pueda evitar que los usuarios abandonen su aplicación. Sin embargo, puede determinar con la tecla INICIO presionada estableciendo un indicador en verdadero en una clase auxiliar que asume que se ha presionado la tecla INICIO , luego cambiando el indicador a falso cuando ocurre un evento que muestra que la tecla INICIO no fue presionada y luego marcando para ver la tecla HOME presionada en el método onStop () de la actividad.

No olvide manejar la tecla INICIO para cualquier menú y en las actividades que inician los menús. Lo mismo aplica para la tecla BUSCAR . A continuación se muestran algunas clases de ejemplo para ilustrar:

Aquí hay un ejemplo de una actividad raíz que mata a la aplicación cuando se destruye:

package android.example; /** * @author Danny Remington - MacroSolve */ public class HomeKey extends CustomActivity { public void onDestroy() { super.onDestroy(); /* * Kill application when the root activity is killed. */ UIHelper.killApp(true); } }

Aquí hay una actividad abstracta que se puede extender para manejar la tecla INICIO para todas las actividades que la amplían:

package android.example; /** * @author Danny Remington - MacroSolve */ import android.app.Activity; import android.view.Menu; import android.view.MenuInflater; /** * Activity that includes custom behavior shared across the application. For * example, bringing up a menu with the settings icon when the menu button is * pressed by the user and then starting the settings activity when the user * clicks on the settings icon. */ public abstract class CustomActivity extends Activity { public void onStart() { super.onStart(); /* * Check if the app was just launched. If the app was just launched then * assume that the HOME key will be pressed next unless a navigation * event by the user or the app occurs. Otherwise the user or the app * navigated to this activity so the HOME key was not pressed. */ UIHelper.checkJustLaunced(); } public void finish() { /* * This can only invoked by the user or the app finishing the activity * by navigating from the activity so the HOME key was not pressed. */ UIHelper.homeKeyPressed = false; super.finish(); } public void onStop() { super.onStop(); /* * Check if the HOME key was pressed. If the HOME key was pressed then * the app will be killed. Otherwise the user or the app is navigating * away from this activity so assume that the HOME key will be pressed * next unless a navigation event by the user or the app occurs. */ UIHelper.checkHomeKeyPressed(true); } public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.settings_menu, menu); /* * Assume that the HOME key will be pressed next unless a navigation * event by the user or the app occurs. */ UIHelper.homeKeyPressed = true; return true; } public boolean onSearchRequested() { /* * Disable the SEARCH key. */ return false; } }

Aquí hay un ejemplo de una pantalla de menú que maneja la tecla HOME :

/** * @author Danny Remington - MacroSolve */ package android.example; import android.os.Bundle; import android.preference.PreferenceActivity; /** * PreferenceActivity for the settings screen. * * @see PreferenceActivity * */ public class SettingsScreen extends PreferenceActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.layout.settings_screen); } public void onStart() { super.onStart(); /* * This can only invoked by the user or the app starting the activity by * navigating to the activity so the HOME key was not pressed. */ UIHelper.homeKeyPressed = false; } public void finish() { /* * This can only invoked by the user or the app finishing the activity * by navigating from the activity so the HOME key was not pressed. */ UIHelper.homeKeyPressed = false; super.finish(); } public void onStop() { super.onStop(); /* * Check if the HOME key was pressed. If the HOME key was pressed then * the app will be killed either safely or quickly. Otherwise the user * or the app is navigating away from the activity so assume that the * HOME key will be pressed next unless a navigation event by the user * or the app occurs. */ UIHelper.checkHomeKeyPressed(true); } public boolean onSearchRequested() { /* * Disable the SEARCH key. */ return false; } }

Aquí hay un ejemplo de una clase auxiliar que maneja la tecla HOME en la aplicación:

package android.example; /** * @author Danny Remington - MacroSolve * */ /** * Helper class to help handling of UI. */ public class UIHelper { public static boolean homeKeyPressed; private static boolean justLaunched = true; /** * Check if the app was just launched. If the app was just launched then * assume that the HOME key will be pressed next unless a navigation event * by the user or the app occurs. Otherwise the user or the app navigated to * the activity so the HOME key was not pressed. */ public static void checkJustLaunced() { if (justLaunched) { homeKeyPressed = true; justLaunched = false; } else { homeKeyPressed = false; } } /** * Check if the HOME key was pressed. If the HOME key was pressed then the * app will be killed either safely or quickly. Otherwise the user or the * app is navigating away from the activity so assume that the HOME key will * be pressed next unless a navigation event by the user or the app occurs. * * @param killSafely * Primitive boolean which indicates whether the app should be * killed safely or quickly when the HOME key is pressed. * * @see {@link UIHelper.killApp} */ public static void checkHomeKeyPressed(boolean killSafely) { if (homeKeyPressed) { killApp(true); } else { homeKeyPressed = true; } } /** * Kill the app either safely or quickly. The app is killed safely by * killing the virtual machine that the app runs in after finalizing all * {@link Object}s created by the app. The app is killed quickly by abruptly * killing the process that the virtual machine that runs the app runs in * without finalizing all {@link Object}s created by the app. Whether the * app is killed safely or quickly the app will be completely created as a * new app in a new virtual machine running in a new process if the user * starts the app again. * * <P> * <B>NOTE:</B> The app will not be killed until all of its threads have * closed if it is killed safely. * </P> * * <P> * <B>NOTE:</B> All threads running under the process will be abruptly * killed when the app is killed quickly. This can lead to various issues * related to threading. For example, if one of those threads was making * multiple related changes to the database, then it may have committed some * of those changes but not all of those changes when it was abruptly * killed. * </P> * * @param killSafely * Primitive boolean which indicates whether the app should be * killed safely or quickly. If true then the app will be killed * safely. Otherwise it will be killed quickly. */ public static void killApp(boolean killSafely) { if (killSafely) { /* * Notify the system to finalize and collect all objects of the app * on exit so that the virtual machine running the app can be killed * by the system without causing issues. NOTE: If this is set to * true then the virtual machine will not be killed until all of its * threads have closed. */ System.runFinalizersOnExit(true); /* * Force the system to close the app down completely instead of * retaining it in the background. The virtual machine that runs the * app will be killed. The app will be completely created as a new * app in a new virtual machine running in a new process if the user * starts the app again. */ System.exit(0); } else { /* * Alternatively the process that runs the virtual machine could be * abruptly killed. This is the quickest way to remove the app from * the device but it could cause problems since resources will not * be finalized first. For example, all threads running under the * process will be abruptly killed when the process is abruptly * killed. If one of those threads was making multiple related * changes to the database, then it may have committed some of those * changes but not all of those changes when it was abruptly killed. */ android.os.Process.killProcess(android.os.Process.myPid()); } } }


Así es como Windows Mobile ha funcionado ... ¡bueno ... alguna vez! Esto es lo que Microsoft tiene que decir al respecto:

http://blogs.msdn.com/windowsmobile/archive/2006/10/05/The-Emperor-Has-No-Close.aspx (¿es triste que haya recordado el título de la publicación del blog desde 2006? Encontré el artículo en Google buscando "el emperador no tiene cierre" jaja)

En breve:

Si el sistema necesita más memoria mientras la aplicación está en segundo plano, cerrará la aplicación. Pero, si el sistema no necesita más memoria, la aplicación permanecerá en la memoria RAM y estará lista para volver rápidamente la próxima vez que el usuario la necesite.

Muchos comentarios en esta pregunta en O''Reilly sugieren que Android se comporta de la misma manera, cerrando aplicaciones que no se han usado por un tiempo solo cuando Android necesita la memoria que está usando.

Como esta es una característica estándar, cambiar el comportamiento a cerrar con fuerza estaría cambiando la experiencia del usuario. Muchos usuarios estarían acostumbrados a dejar de lado sus aplicaciones de Android, por lo que cuando descarten una con la intención de volver a ella después de realizar otras tareas, pueden sentirse frustrados de que el estado de la aplicación se reinicie o de que demore más tiempo. abrir. Me quedaría con el comportamiento estándar porque es lo que se espera.


Copie el código a continuación y pegue el archivo AndroidManifest.xml en First Activity Tag.

<activity android:name="com.SplashActivity" android:clearTaskOnLaunch="true" android:launchMode="singleTask" android:excludeFromRecents="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>

Además, agregue este código a continuación en la etiqueta de actividad en el archivo AndroidManifest.xml

android:finishOnTaskLaunch="true"


Creo que cerrará tu actividad y toda la Sub actividad relacionada con ella.

public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId();] if (id == R.id.Exit) { this.finishAffinity(); return true; } return super.onOptionsItemSelected(item); }


El uso de finishAffinity() puede ser una buena opción si deseas cerrar toda la actividad de la aplicación. Según los documentos de Android:

Finish this activity as well as all activities immediately below it in the current task that have the same affinity.


Esta es la forma en que lo hice:

Acabo de poner

Intent intent = new Intent(Main.this, SOMECLASSNAME.class); Main.this.startActivityForResult(intent, 0);

dentro del método que abre una actividad, luego dentro del método de SOMECLASSNAME que está diseñado para cerrar la aplicación que puse:

setResult(0); finish();

Y pongo lo siguiente en mi clase principal:

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(resultCode == 0) { finish(); } }


La mejor y más breve forma de usar la tabla System.exit.

System.exit(0);

La máquina virtual deja de ejecutarse y el programa saldrá.


Llamar al método finish() en una actividad tiene el efecto deseado sobre esa actividad actual.


Ninguna de las respuestas anteriores funciona bien en mi aplicación

aquí está mi código de trabajo

en tu botón de salida:

Intent intent = new Intent(getApplicationContext(), MainActivity.class); ComponentName cn = intent.getComponent(); Intent mainIntent = IntentCompat.makeRestartActivityTask(cn); mainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); mainIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); mainIntent.putExtra("close", true); startActivity(mainIntent); finish();

ese código es para cerrar cualquier otra actividad y poner MainActivity en la parte superior ahora en su MainActivity:

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


No es posible con 2.3. Busco mucho, y probé muchas aplicaciones. La mejor solución es instalar ambos (go taskmanager) y (reinicio rápido). Cuando los use juntos, funcionará y liberará la memoria. Otra opción es actualizar a Android Sandwich 4.0.4 que permite el control (cierre) de las aplicaciones.


No es posible usar las API de framework. Es a discreción del sistema operativo (Android) para decidir cuándo se debe eliminar un proceso o permanecer en la memoria. Esto es por razones de eficiencia: si el usuario decide relanzar la aplicación, entonces ya está allí sin que tenga que cargarse en la memoria.

Entonces, no, no solo se desalienta , es imposible hacerlo.


Para salir de las formas de aplicación:

Camino 1:

call finish(); y anular onDestroy(); . Pon el siguiente código en onDestroy() :

System.runFinalizersOnExit(true)

o

android.os.Process.killProcess(android.os.Process.myPid());

Camino 2

public void quit() { int pid = android.os.Process.myPid(); android.os.Process.killProcess(pid); System.exit(0); }

Camino 3:

Quit(); protected void Quit() { super.finish(); }

Camino 4:

Intent intent = new Intent(getApplicationContext(), LoginActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.putExtra("EXIT", true); startActivity(intent); if (getIntent().getBooleanExtra("EXIT", false)) { finish(); }

Camino 5:

Algunas veces, llamar a finish() solo saldrá de la actividad actual, no de toda la aplicación. Sin embargo, hay una solución para esto. Cada vez que inicie una activity , startActivityForResult() usando startActivityForResult() . Cuando desee cerrar toda la aplicación, puede hacer algo como lo siguiente:

setResult(RESULT_CLOSE_ALL); finish();

Luego, defina la devolución de llamada onActivityResult(...) cada actividad para que cuando una activity regrese con el valor RESULT_CLOSE_ALL , también llame 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); }


Pon un finish(); declaración como abajo:

myIntent.putExtra("key1", editText2.getText().toString()); finish(); LoginActivity.this.startActivity(myIntent);

En cada actividad.


Simplemente escriba el siguiente código en onBackPressed:

@Override public void onBackPressed() { // super.onBackPressed(); //Creating an alert dialog to logout AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this); alertDialogBuilder.setMessage("Do you want to Exit?"); alertDialogBuilder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); startActivity(intent); } }); alertDialogBuilder.setNegativeButton("No", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { } }); //Showing the alert dialog AlertDialog alertDialog = alertDialogBuilder.create(); alertDialog.show(); }


Solo para responder a mi propia pregunta ahora después de tanto tiempo (desde que CommonsWare comentó la respuesta más popular diciendo NO deberíamos hacer esto):

Cuando quiero salir de la aplicación:

  1. Empiezo mi primera actividad (ya sea pantalla de inicio, o cualquier actividad que esté actualmente en la parte inferior de la pila de actividades) con FLAG_ACTIVITY_CLEAR_TOP (que cerrará todas las demás actividades iniciadas después de ella, lo que significa, todas ellas). Simplemente realice esta actividad en la pila de actividades (no la finalice por algún motivo por adelantado).
  2. Llamo a finish() en esta actividad

Esto es, funciona bastante bien para mí.


llamando a finish (); en el botón OnClick o en el menú

case R.id.menu_settings:

finish(); return true;


quería volver a la pantalla de inicio de mi dispositivo Android, así que simplemente utilicé:

moveTaskToBack(true);


Simplemente escriba este código en su botón EXIT clic.

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

Y en el método onCreate () de MainActivity.class escriba el código siguiente como primera línea,

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


@Override protected void onPause() { super.onPause(); System.exit(0); }


public class CloseAppActivity extends AppCompatActivity { public static final void closeApp(Activity activity) { Intent intent = new Intent(activity, CloseAppActivity.class); intent.addCategory(Intent.CATEGORY_HOME); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK); activity.startActivity(intent); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); finish(); } }

y en manifiesto:

<activity android:name=".presenter.activity.CloseAppActivity" android:noHistory="true" android:clearTaskOnLaunch="true"/>

Luego puede llamar a CloseAppActivity.closeApp(fromActivity) y la aplicación se cerrará.