Cómo matar a mi propia actividad – la manera dura
Así que tengo mi actividad, y al presionar un botón de "Salir" llamo Activity.finish (). Esto efectivamente cierra mi aplicación.
El problema: El proceso de Dalvik de mi aplicación sigue siendo alrededor como un zombi en segundo plano. Parece que esto es normal ya que otras aplicaciones hacen lo mismo. Incluso El ejemplo del hola-mundo cuelga alrededor en memoria.
- La aplicación de Android no se cierra después de llamar a System.exit (0)
- Android - ¿Cómo obtener el processName o packageName usando PID?
- ¿Cómo matar una aplicación de terceros?
- ¿El nombre del proceso es el mismo que el nombre del paquete en android?
- ¿Cómo matar un proceso?
Podría vivir con esto, pero unfortunatley este comportamiento hace el desarrollo de mi aplicación un dolor. Tengo un servicio remoto conectado a mi Actividad, y este servicio no se descargará hasta que mi Actividad se descargue (lo que como dije nunca lo hace).
Todo se mantiene de alguna manera vivo sin ninguna buena razón.
¿Cómo puedo realmente eliminar mi actividad de la memoria?
Estoy buscando algo como Activity.finish_and_kill_my_process_please () llamada o algo similar.
- Android obtener el nombre del proceso dentro de BroadcastReceiver
- Cómo leer la salida del comando de proceso android
- Cómo forzar a detener una aplicación de Android
- Activación del flash de la cámara durante la grabación de vídeo
- Exploración de subred de Android
- ¿Cómo puedo ver qué wakelocks están activos?
- ¿Por qué debo comenzar el servicio de urbanairship como un proceso separado?
- Servicio de Android: proceso vs. no
Así que tengo mi actividad, y al presionar un botón de "Salir" llamo Activity.finish (). Esto efectivamente cierra mi aplicación.
Por favor, no lo hagas .
El proceso de Dalvik de mi aplicación sigue siendo alrededor como un zombi en segundo plano.
El proceso se mantiene en un caché, para su posible reutilización por Android. Puede ignorarlo con seguridad.
Tengo un servicio remoto conectado a mi Actividad, y este servicio no se descargará hasta que mi Actividad se descargue (lo que como dije nunca lo hace).
Probablemente tenga un error en su aplicación, como llamar a startService()
y no llamar a stopService()
, o llamar a bindService()
y no llamar a unbindService()
.
- Terminación de llamada (); en el botón de clic
- Añada esta línea al método onDestroy:
android.os.Process.killProcess (android.os.Process.myPid ());
public void onDestroy() { super.onDestroy(); android.os.Process.killProcess(android.os.Process.myPid()); }
Intente usar el método killBackgroundProcesses
:
ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); activityManager.killBackgroundProcesses("name.of.your.package");
Deberá agregar el permiso KILL_BACKGROUND_PROCESSES
al archivo AndroidManifest.xml
.
Bueno, si no sólo la actividad, sino también la aplicación que desea terminar, puede utilizar
System.exit(0)
La gente dice que es un ejemplo obsoleto o malo, pero, bueno, es Java puro y funciona …
Al matar el proceso se puede detener la aplicación completamente. Desde la última pantalla en la pulsación de botón de nuevo puede matar el proceso por:
public void onBackPressed() { super.onBackPressed(); int pid = android.os.Process.myPid(); android.os.Process.killProcess(pid); }
Similar a System.exit (0) en el lado de Java, también puede llamar a un método nativo durante onDestroy que llama a exit (0) en el lado de C / C ++. Esto parece obligar a lib a salir completamente. ¡Está funcionando para mí!
Mediante el uso de ActivityManager podemos cerrar las otras aplicaciones también.
private ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); am.restartPackage("com.jimmy.appToBeClosed");
para usar el código anterior debe tener los permisos de android.permission.RESTART_PACKAGE
en el archivo de manifiesto.
System.exit () descarga instantáneamente toda la máquina virtual con todas las bibliotecas nativas, servicios y etc.