Android cuando regresa a la actividad se destruye y no se reanuda
Estoy construyendo una aplicación android con dos actividades que utilizan la barra de acción (https://github.com/johannilsson/android-actionbar como estoy apuntando Android 2.2).
Tiene una serie de actividades. Hay una actividad "Inicio", llamada Feed, y otra actividad llamada "Configuración".
- Activar / desactivar dinámicamente ocultar / mostrar el icono de acción de Android ActionBar
- Apariencia de texto personalizada de ActionBar en Android 4.3
- OnNavigationItemSelected en ActionBar se está llamando en el inicio cómo puede evitarlo?
- Cómo cambiar el relleno o el margen del icono o logotipo de la barra de acción en el tema XML?
- Definido por el usuario ActionBar Action View: obtener el ancho correcto
El problema que tengo es que usando la función createIntent que se da en la muestra para la barra de acción que estoy usando, la actividad se destruye en lugar de continuar cuando el usuario pulsa el botón de inicio para volver a la actividad de Feed.
Con un poco de depuración encontré que se está destruyendo, no cuando la actividad se detiene y se detiene en primer lugar, pero cuando la solicitud para que se reanude sucede.
public static Intent createIntent(Context context) { Intent i = new Intent(context, Feed.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); return i; }
Esta es una molestia importante, y ralentiza considerablemente la aplicación, ya que tiene que recargar sus datos para el feed (que se almacena en caché, pero no es instantánea para obtener los datos recargados).
Entonces, ¿cómo puedo evitar este comportamiento? Y por qué está sucediendo esto, ya que creo que la bandera extra debe detener este comportamiento.
- Capacidad de ActionBar / desbordamiento que no cambia en cambio de orientación
- Tire para actualizar como nueva aplicación gmail (4.5)
- Agregue progreso horizontal indeterminado a la barra de acción
- Implementación de pestañas + deslizamiento en versiones android <4.0
- Android cómo diseñar un SearchView en Actionbar?
- ¿Cómo se elimina el texto del título de la Android ActionBar?
- ¿Cómo puedo obtener el atributo ActionBar en mi clase
- Elevación de la barra de acción predeterminada
Desea utilizar:
FLAG_ACTIVITY_REORDER_TO_FRONT
Cita de documentos Android:
Si se establece en un intento pasado a Context.startActivity (), este indicador hará que la actividad iniciada se lleve al frente de la pila de historial de su tarea si ya se está ejecutando.
Por ejemplo, considere una tarea que consta de cuatro actividades: A, B, C, D. Si D llama startActivity () con un Intent que resuelve al componente de la actividad B, entonces B será llevado al frente de la pila de historial, Con este orden resultante: A, C, D, B. Este indicador se ignorará si FLAG_ACTIVITY_CLEAR_TOP también se especifica.
public static Intent createIntent(Context context) { Intent i = new Intent(context, Feed.class); i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); return i; }
Dependiendo de qué clase está lanzando qué, usted puede ser que tenga un problema donde una nueva instancia de su actividad está siendo lanzada y la vieja está siendo destruida. Esto es lo que dice la documentación sobre FLAG_ACTIVITY_CLEAR_TOP
:
Si se establece, y la actividad que se está iniciando ya se está ejecutando en la tarea actual, entonces en lugar de iniciar una nueva instancia de esa actividad, todas las otras actividades en la parte superior de la misma se cerrará y esta Intención se entregará a la (ahora en Arriba) actividad antigua como una nueva Intención.
Tenga en cuenta que dice "si la actividad que se está iniciando ya se está ejecutando en la tarea actual …" Así que no estoy seguro, pero esto tendría sentido si su depuración le ha demostrado que la actividad también se está destruyendo.
Al depurar, ¿está buscando los números de "id" para los objetos de su clase? Establezca un punto de interrupción en los onCreate()
y onDestroy()
de su clase y observe el id de la clase dentro de cada uno. Si son diferentes, entonces usted sabe que tiene dos instancias diferentes de su actividad.
Como una nota / pregunta de lado, ¿cómo estás "apuntando" 2.2 si la ActionBar
no estaba disponible hasta 3.0?