permisos - metodo intent android
¿Qué sucede cuando todas las actividades de una aplicación terminan? (4)
Guión:
Tengo cuatro actividades en mi aplicación para Android, digamos A, B, C y D. Hay una clase Constants.java
en la aplicación que extiende la clase de Application
para mantener el estado global de la aplicación. La clase Constantes tiene todas las variables constantes de la aplicación. El flujo de actividad es así A-->B-->C-->D
Cuando se presiona el botón Atrás de la Actividad A, estoy llamando al método de finalización () que finaliza la actividad A y cierra la aplicación. Después de eso, si abro la aplicación desde todas las aplicaciones, hay una variable en Constants.java
cuyo valor persiste desde el último lanzamiento. No sucede lo mismo cuando estoy haciendo System.exit(10)
seguido de Process.killProcess(Process.myPid())
de la actividad A (en la parte posterior presionada).
Preguntas:
- ¿Terminando todas las actividades llamando a finish () de cada actividad, se cerrará la aplicación (su proceso)?
- ¿Cómo persiste el valor de una variable incluso si todas sus actividades están terminadas (cerradas)?
- ¿Es justo llamar a
System.exit(10)
seguido deProcess.killProcess(Process.myPid())
para salir de la aplicación?
Actualizar:
¿Cómo puedo borrar las constantes de la aplicación al salir de la aplicación (Volver a presionar HomeActivity)?
¿Terminando todas las actividades llamando a finish () de cada actividad, se cerrará la aplicación (su proceso)?
No, no debería. Esto se debe a que las Actividades no son el único componente de una aplicación. Servicios, BroadcastReceivers todavía se puede ejecutar sin una interfaz de usuario. Al mantener el proceso de la Aplicación en ejecución mientras puede, Android garantiza una respuesta más rápida para el usuario que abre la aplicación nuevamente, o un lanzamiento más rápido de los Servicios, etc., ya que la instancia de la Aplicación no necesita ser recreada.
Su proceso solo terminará si usted u otra aplicación lo matan explícitamente, o el sistema lo mata para liberar recursos.
¿Cómo persiste el valor de una variable incluso si todas sus actividades están terminadas (cerradas)?
Su variable está en la clase de aplicación, que sigue un modelo de Singleton, y por lo tanto, su valor persistirá hasta que finalice el proceso completo de la aplicación.
Además, finish()
solo llama onDestroy()
, que no es un deconstructor, como se explica here . Por lo tanto, incluso las variables de actividad pueden persistir después de que se haya llamado a la finalización, ya que su instancia aún se mantiene activa hasta que Android sienta la necesidad de destruirla o de que se elimine su proceso.
¿Es justo llamar a System.exit (10) seguido de Process.killProcess (Process.myPid ()) para salir de la aplicación?
Si bien esto matará la aplicación, no se recomienda. Vea this pregunta por una variedad de razones para eso.
1) No, Android no lo garantiza. Depende del sistema operativo decidir si terminar el proceso o no.
2) Porque la instancia de Activity
aún vive en la máquina virtual de Dalvik. En Android cada proceso tiene una máquina virtual Dalvik separada.
Cada proceso tiene su propia máquina virtual (VM), por lo que el código de una aplicación se ejecuta de forma aislada de otras aplicaciones.
Cuando se llama a finish()
esto no significa que la instancia de la Activity
sea basura recolectada. Le estás diciendo a Android que quieres cerrar la Activity
(no la muestres más). Seguirá presente hasta que Android decida cancelar el proceso (y, por lo tanto, terminar el DVM) o la instancia se recolecte como basura.
Android inicia el proceso cuando se necesita ejecutar cualquiera de los componentes de la aplicación, luego lo cierra cuando ya no es necesario o cuando el sistema debe recuperar la memoria para otras aplicaciones.
3) No lo haría a menos que tenga alguna razón muy fuerte. Como regla general, debe dejar que Android maneje cuándo matar su aplicación, a menos que haya algo en su estado de aplicación que requiera un reinicio de la aplicación cuando pierda el enfoque.
Android mantendrá el proceso hasta que necesite recuperar la memoria del proceso. De esa manera, si el usuario regresa inmediatamente a su aplicación, su aplicación aparecerá más rápido.
El valor persistirá hasta que la aplicación sea eliminada.
¿No debería usar System.exit (10) seguido de Process.killProcess (Process.myPid ()) para salir de la aplicación?
Realmente deberías pensar en no salir de la aplicación. No es así como funcionan las aplicaciones de Android.
para su actualización:
How can I clear the application constants on exit of the application(Back press of the HomeActivity)?
Reemplace onBackPressed dentro de su HomeActivity y antes de llamar a super.onBackPressed () borre toda la variable. Si tiene un configurador para una cadena ubicada dentro de su subclase de aplicación:
@Override
public void onBackPressed() {
getApplication().setMyString(null);
super.onBackPressed();
}
Si tiene suficientes estados para borrar, puede escribir un método que reinicie todos los campos y llamarlo:
@Override
public void onBackPressed() {
getApplication().clearAllMyFields();
super.onBackPressed();
}
Por supuesto, esos campos no tienen que marcarse como final
o como final
static final