X

Pausar y Reanudar una Actividad

Durante un uso normal de la app, la actividad en primer plano algunas veces se encuentra obstaculizada por otros componentes visuales que causan que la actividad se pause. Por ejemplo, cuando una actividad semitransparente se abre (como un diálogo), la actividad previa se pausa. Mientras la actividad se encuentre parcialmente visible pero sin ser la actividad en la que se encuentra el foco, se mantendrá pausada.

Sin embargo, una vez que la actividad se encuentra completamente obstaculizada y no es visible, se para (verás más información sobre esto en la siguiente lección).

En cuanto tu actividad entra en el estado pausada, el sistema llama al método onPause() de tu Activity, el cual te permite para las acciones que se encuentran en marcha y que no deberían continuar mientras esté la actividad pausada (un vídeo, etc) o mantener cualquier información que debería estar guardada permanentemente en caso de que el usuario acabe abandonando tu app. Si el usuario regresa a tu actividad desde el estado pausada, el sistema reanuda la misma y llama al método onResume().

Nota: Cuando tu actividad recibe la llamada onPause(), puede indicar que la actividad será pausada durante un momento y que el usuario puede volver a enfocarse en tu actividad. Sin embargo, lo habitual es que indique que el usuario está abandonando tu actividad.

Figura 1. Cuando una actividad semitransparente obstaculiza tu actividad, el sistema llama a onPause() y la actividad espera en el estado Paused (1). Si el usuario regresa a la actividad mientras estaba pausada, el sistema llama al método onResume() (2).

Pausar tu Actividad

Cuando el sistema llama al método onPause() de tu actividad, técnicamente significa que tu actividad está todavía parcialmente visible, pero a menudo es una indicación de que el usuario está abandonando la actividad y pronto entrará en el estado Parada (Stopped). Deberías habitualmente utilizar la llamada onPause() para:

  • Parar las animaciones u otras acciones en marcha que podrían consumir recursos.
  • Confirmar los cambios sin guardar, pero solo si el usuario espera que esos cambios sean permanentemente guardados cuando ellos abandonan tu app (por ejemplo, el borrador de un email).
  • Liberar los recursos del sistema, como los broadcast receivers (receptores de radiodifusión), manipular los sensores (como el GPS), o cualquier otro recurso que pueda gastar la batería mientras tu actividad está pausada y el usuario no la necesita.

Por ejemplo, si tu aplicación usa la Camera, el método onPause() es un buen lugar para liberarla.

@Override
public void onPause() {
    super.onPause();  // Always call the superclass method first

    // Liberar la Camera ya que no la necesiamos con la actividad pausada
    // y las otras actividades no la utilizan
    if (mCamera != null) {
        mCamera.release()
        mCamera = null;
    }
}

Generalmente, no deberías utilizar onPause() para almacenar cambios del usuario (como puede ser información personal introducida en un formulario) en un almacenamiento permanente. La única vez en la que deberías mantener los cambios del usuario en este tipo de almacenamiento dentro del método onPause() es cuando estás seguro de que los usuarios esperan que esos cambios sean autoguardados (como puede ser el borrador de un email). Sin embargo, deberías evitar un uso intensivo del CPU durante onPause(), como puede ser escribir en una base de datos, ya que puede provocar una transición lenta a la próxima actividad (deberías en su lugar realizar las tareas de alta carga durante onStop()).

Deberías mantener la cantidad de operaciones finalizadas en el método onPause() en orden de permitir una transición rápida al siguiente destino del usuario si tu actividad se está, actualmente, parando. Si son demasiadas operaciones piensa en utilizar el método onStop().

Nota: Cuando tu actividad se pausa, la instancia Activity se mantiene en la memoria y será rellamada cuando la actividad se reanude. No necesitas reinicializar los componentes que fueron creados durante cualquiera de los métodos hasta alcanzar el estado Resumed (Iniciada).

Reanudar tu Actividad

Cuando el usuario reanuda tu actividad desde el estado Paused (Pausada), el sistema llama al método onResume().

Ten en cuenta de que el sistema llama a este método cada vez que tu actividad vuelve al primer plano, incluyéndose cuando ésta es creada por primera vez. Por tanto, deberías implementar el método onResume() para iniciar los componentes únicamente utilizados mientras la actividad tiene la atención del usuario).

El siguiente ejemplo de onResume() es la contrapartida al ejemplo de arriba de onPause(), es decir, inicia la cámara que fue liberada cuando la actividad se pausó.

@Override
public void onResume() {
    super.onResume();  // Always call the superclass method first

    // Conseguir que la instancia Camera tenga el foco del usuario
    if (mCamera == null) {
        initializeCamera(); // Local method to handle camera init
    }
}

Puedes ver más información sobre Pausar y Reanudar tu Actividad en la página oficial de Google en inglés pulsando aquí.

Los comentarios de Disqus están cargando....