El método android finish () no borra la aplicación de la memoria

Tengo una actividad y llamo al método finish () y la actividad no se borra de la memoria.

Después de llamar a finish (), veo que el método onDestroy () se ejecuta con éxito (y borro todas mis variables y todo).

¿Debería borrarse de la memoria o de cómo funciona Android? Según entiendo, el ciclo de vida de la actividad ha terminado.

Y si mantiene la aplicación en la memoria para que funcione más rápido la segunda vez que el usuario la usa, ¿qué tipo de objetos puedo dejar en la memoria para volver a usar? Si entiendo correctamente, se supone que debo borrar todo en Destroy.

Android mantiene los procesos por si el usuario desea reiniciar la aplicación, esto hace que la fase de inicio sea más rápida. El proceso no hará nada y si la memoria necesita ser recuperada, el proceso será eliminado. No te preocupes por eso 🙂

La mejor manera es usar primero finish() y luego utilizar System.exit(0) para borrar las variables estáticas. Le dará un poco de espacio libre.

Muchas aplicaciones dejan los procesos de trabajo y las variables lo que me enoja. Después de 30 minutos de usar la memoria está llena y tengo que ejecutar el Administrador de tareas – Niv. 2 memoria limpia

No es cierto que se trate de problemas que he probado durante más de 3 años en mis aplicaciones. Nunca se cuelgue o reinicie después de usar Exit()

Intenta usar

System.exit (0);

Una vez que se llama a onDestroy (), su actividad está condenada al fracaso. Período.

Una vez dicho esto, el proceso (y, por lo tanto, el espacio de direcciones) asignado a su aplicación podría seguir siendo utilizado por otra parte de su aplicación, otra actividad o servicio. También es posible que su proceso esté vacío y que el sistema operativo aún no haya logrado reclamarlo; no es instantáneo

Consulte el documento Ciclo de vida del proceso para obtener más información:
http://developer.android.com/reference/android/app/Activity.html#ProcessLifecycle

De todos modos, si su actividad se relanza, tendrá que volver a pasar por toda la secuencia de inicio, comenzando con onCreate (). No asum que cualquier cosa puede ser reutilizada implícitamente.

Si necesita cerrar la aplicación desde la subactividad, puedo sugerirle que la haga de tal manera: 1) desde la actividad A, la actividad de llamada B como startActivityForResult (intention, REQUEST_CODE);

 Intent intent = new Intent() .setClass(ActivityA.this, ActivityB.class); startActivityForResult(intent, REQUEST_CODE); 

2) en la actividad A debes agregar el método:

 protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE) { if (resultCode == RESULT_CLOSE_APPLICATION) { this.finish(); } } } 

3) en el final de la llamada de la actividad B:

 this.setResult(RESULT_CLOSE_APPLICATION); this.finish(); 

Como una solución rápida, puedes utilizar lo siguiente para matar tu aplicación:

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

Pero no recomendaría esto para aplicaciones comerciales porque va en contra de cómo funciona el sistema de administración de memoria de Android.

De acuerdo con esta presentación de Google I / O 2008, Finish también debería causar la muerte del proceso, pero escribí una aplicación rápida para probar esto y en Android 1.5 no es así.

Como dijo Romain (que por cierto es un ingeniero de UI Toolkit para Android), su proceso simplemente se quedará allí sin hacer nada de todos modos, por lo que no es nada de lo que preocuparse.