5

No tengo Actividades (A, B, C) dentro de mi Application.When i iniciar la aplicación Actividad A:Problema con actividad matado por el sistema si ya no es visible en Android

A:onCreate() 
    A:onStart() 
    A:onResume() 

Usando la intención soy llamando Segunda Actividad (a -> B):

A:onPause() 
    B:onCreate() 
    B:onStart() 
    B:onResume() 
    A:onStop() 

Entonces haga clic en el botón "Inicio" lo que la aplicación va a fondo: Ahora

B:onPause() 
    B:onStop() 

Después de 1 ó 2 hora más tarde Una vez más voy a la página de inicio dentro de mi dispositivo y haga clic en el icono de la aplicación que se ejecuta como:

B:onDestroy() 
A:onRestart() 
A:onStart() 
A:onResume() 

pero necesito ir cuál Actividad abandoné esta manera,

B:onRestart() 
B:onStart() 
B:onResume() 

he leído algunos artículos que dice que la actividad como muerto por el sistema debido a visible.Is no hay más tiempo allí cualquier posible fijar mi problema ...

Gracias de antemano ...

+0

¿Puedes publicar tu código de la actividad A y B? – Dharmendra

Respuesta

6

Es posible que se confunden dos cosas diferentes aquí:

  1. Android no matar una actividad si se necesita memoria. Lo que hace es que mata todo el proceso en el que se está ejecutando la actividad. En general, eso significa que Android mata a todos de sus actividades en esta situación. Sin embargo, recuerda la pila de actividades y cuando el usuario vuelve a la aplicación, Android creará un nuevo proceso y luego volverá a crear cada actividad (a su vez, según sea necesario). Comienza por recrear la actividad que estaba en la parte superior de la pila de actividades (es decir, donde el usuario dejó la aplicación).

  2. Android asume que si el usuario deja una tarea durante un largo periodo de tiempo (creo que esto es algo así como 30 minutos) y luego ya no está interesada en esa tarea y no hay ningún punto en recordar que la el usuario estaba en la pila de actividades de esa tarea porque probablemente ya no le importa. En este caso, lo que sucede es que cuando el usuario vuelve a la tarea (o reinicia la aplicación que estaba en la parte superior de la pila de actividades en esa tarea) Android simplemente borra la tarea a la actividad raíz. Esto tiene el efecto de que parece que la aplicación es comenzando de nuevo. Este es el comportamiento deseado (y documentado).

Lo que quieres hacer es evitar que Android limpie la tarea en la posición n. ° 2.Lo hace mediante la adición de

android:alwaysRetainTaskState="true" 

a la etiqueta <activity> de la actividad raíz (es decir: la actividad que se inicia la aplicación, el que tiene ACTION_MAIN y CATEGORY_LAUNCHER).

+0

oh muchas gracias por tu clara explicación David .... – Srinivasan

1

No creo que esto sea algo que seguramente pueda controlar. Si tu actividad está en segundo plano durante mucho tiempo y mientras tanto otras aplicaciones necesitan memoria, el sistema matará tu actividad para liberar memoria.

+0

Sí, ya sé Andy pero el requisito de mi cliente es reiniciar cual dejo ... Pero alguna aplicación mantiene así ¿No sé cómo? – Srinivasan

+1

Entonces creo que debería pensar en hacer una implementación personalizada. Por ejemplo, cada vez que se abre la actividad B, en onCreate() escribe una marca en SharedPreferences, y en onDestroy() elimina esa marca. Ahora cuando comienza la actividad A, verifique las Preferencias Compartidas para esa bandera. Si la bandera está configurada, significa que la actividad B se abrió pero el sistema la mató (porque id no pasó por onDestroy() para eliminar la marca), por lo tanto, redirija al usuario a la Actividad B desde allí. Si la bandera no está configurada, entonces no haga nada. Esta es una idea ... –

+0

Pero esto también va desde onCreate() de Second Activity, por lo que no conservará ningún valor. – Srinivasan

Cuestiones relacionadas