Ir al contenido principal

Android: Activities

Una activity es el componente que se asocia a una pantalla de la aplicación, desde la que el usuario puede interactuar. Una aplicación suele estar compuesta por varias activities, ya que utiliza varias pantallas.

¿Qué características presentan?

  - Se definen en el AndroidManifest.xml con la etiqueta <activity>
  - La Activity que se especifica como principal, es la que se le presenta al usuario cuando inicia la aplicación.
  - Una Activity puede arrancar otra, con startActivity(Intent) o startActivityForResult(Intent,int) (esto se verá más adelante en otro post).
  - Se manejan con una pila de Activities, donde cada una de ellas puede tener el siguiente estado:
         * Active: está en primer plano y es visible para el usuario (está en el top de la pila)
         * Paused: ha perdido el foco pero sigue visible. El sistema podría eliminarla si se necesita urgentemente memoria.
         * Stopped: no es visible para el usuario. El sistema a menudo las eliminarla cuando se necesita memoria.

¿Qué son desde el punto de vista Java?

 - Son clases públicas que heredan de android.app.Activity.
 - El ciclo de vida de una Activity está compuesto por los siguientes métodos:
public class ExampleActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // La actividad está siendo creada
        // Aquí es donde suele llamarse a setContentView(int) 
        //y a findViewById(int).
    }
    @Override
    protected void onStart() {
        super.onStart();
        // Invocado justo antes de hacerse visible
    }
    @Override
    protected void onResume() {
        super.onResume();
        // La actividad se ha vuelto visible (ahora está "Active").
    }
    @Override
    protected void onRestart() {
        super.onStart();
        // La actividad va a iniciarse otra vez, 
        // después de haber sido Stopped.
    }
    @Override
    protected void onPause() {
        super.onPause();
        // La actividad va a pasar al estado Paused
        // Aquí debemos comitear todos los cambios 
        // hechos por el usuario, de datos persistentes,
        // y parar todo lo que consuma CPU
    }
    @Override
    protected void onStop() {
        super.onStop();
        // La actividad no es visible (ahora está "Stopped")
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        // La actividad va a ser eliminada
    }
}
- Para guardar el estado de una actividad, se utiliza el método onSaveInstanceState(). El sistema normalmente llama a este método antes de que una actividad se vuelva vulnerable a ser eliminada, utilizando un objeto Bundle que almacena la información como pares nombre-valor. Así, si se restaura la actividad, el sistema pasa este Bundle en el método onCreate(), para poder recuperar su estado previo. Si no hubiese información previa, Bundle sería null. Como no se garantiza que el sistema llame siempre a onSaveInstanceState(), sólo se debe usar para guardar datos no persistentes (para eso ya está onPause()).

RETO: Ahora que ya conocemos los estados de una Activity, los métodos Java de su ciclo de vida y sus transiciones ¿Os atrevéis a dibujarlo?

Referencia: http://developer.android.com/guide/topics/fundamentals/activities.html

Comentarios

  1. Excelente la nota, me sirvio mucho para una tarea del colegio =)

    ResponderEliminar
  2. Hola Carlos,
    me alegro que te haya sido útil :)

    Un saludo,
    Ana

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Leer un fichero properties con java.util.Properties

Los ficheros .properties son simples ficheros de texto que se suelen utilizar para guardar parámetros de configuración, en forma de pares clave-valor. Ejemplo de fichero: configuration.properties #User parameters user.name=Ana user.language=spanish Si estamos usando Java, podemos utilizar la clase java.util.Properties para leer los parámetros de este fichero: private static final String USER_NAME = "user.name"; private static final String USER_LANGUAGE = "user.language"; public void showProperties() throws Exception { Properties p = new Properties(); InputStream is = App.class.getResourceAsStream("/configuration.properties"); p.load(is); is.close(); String userName = p.getProperty(USER_NAME); String userCountry = p.getProperty(USER_LANGUAGE); System.out.println("userName: "+userName); System.out.println("userLanguage: "+userCountry); } Después de ejecutar este método, obtendríamos la siguiente salida: ...

JSF 2.0: Managed Beans (III)

Anteriormente ya hemos visto que cuando se declara un bean, tenemos que darle un scope: application, session, view, request, none. Un scope es un mapeo entre nombres y objetos que se almacena durante un determinado periodo de tiempo. En este post vamos a explicar cada uno de ellos. Si declaramos el bean desde el fichero faces-config.xml, indicamos el scope en <managed-bean-scope> y si queremos hacerlo con anotaciones, utilizaremos @{Application,Session,View,Request,None}Scoped Application Con este scope, se guarda la información durante toda la vida de la aplicación web, independientemente de todas las peticiones y sesiones que se realicen. Este bean se instancia con la primera petición a la aplicación y desaparece cuando la aplicación web se elimina del servidor. Si queremos que el bean se instancie antes de que se muestre la primera página de la aplicación, usamos la propiedad eager a true. @ManagedBean(eager=true) ó <managed-bean eager="true"> Session...

JSF 2.0: Message bundles

Los message bundles son ficheros .properties que guardan mensajes del tipo clave=valor. Si centralizamos todos los mensajes de nuestra aplicación en estos ficheros, es más fácil poder localizarlos si queremos realizar algún cambio y también nos ayuda para la internacionalización de la aplicación. Ejemplo: messages.properties (en src/java/com/examples) con dos mensajes name=Tu nombre: age=Tu edad: ¿Cómo los declaramos? 1) En cada página JSF donde lo necesitemos <f:loadBundle basename="com.examples.messages" var="msgs"/> 2) De manera global en faces-config.xml <application>      <resource-bundle>           <base-name>com.examples.messages</base-name>           <var>msg</var>      </resource-bundle> </application> Esta opción es más eficiente ya que sólo crea el bundle una v...