Diferencia entre revisiones de «Usuario:ManuelRomero/Actividades»
De WikiEducator
(→Código de ejemplo) |
(→Ciclo de vida de una activity) |
||
(6 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 2: | Línea 2: | ||
<br> | <br> | ||
− | === | + | ===Activity, fragment e Intens=== |
<br/> | <br/> | ||
− | {{Definicion|''''' | + | {{Definicion|'''''Activity''''' es una ventana que contiene la interfaz de usuario de una aplicación}} |
#Referencia | #Referencia | ||
http://developer.android.com/guide/components/activities.html | http://developer.android.com/guide/components/activities.html | ||
http://developer.android.com/reference/android/app/Activity.html | http://developer.android.com/reference/android/app/Activity.html | ||
− | *Una aplicación puede tener una o más | + | *Una aplicación puede tener una o más activity |
− | *El objetivo de una | + | *El objetivo de una activity es interactuar con el usuario |
− | *Una | + | *Una activity tiene vida propia cumpliendo un ciclo de vida |
− | #toda | + | #toda activity deriva de la clase '''''Activity''''' |
+ | |||
+ | ===Ciclo de vida de una activity=== | ||
+ | *Una actividad puede tener tres estados | ||
+ | ;Ejecución | ||
+ | :estará en la parte superior de la pila de actividades | ||
+ | :aparecerá en pantalla. Esto implica que interactuará directamente con el usuario. | ||
+ | ;Pausa | ||
+ | :Esta actividad está visible, pero parcialmente oculta por una actividad transparente o un cuadro de diálogo. | ||
+ | :Otro ejemplo es cuando la actividad es bloqueada por la pantalla del teléfono. | ||
+ | :Una actividad en pausa '''''puede ser eliminada por el sistema''''' si éste lo considera necesario (p.e. falta de memoria), sin aviso previo. | ||
+ | ;Detenida | ||
+ | :Otra actividad pasa a estar en ejecución y nos oculta totalmente. | ||
+ | :No está visible en pantalla ni el usuario puede interactuar con ella. | ||
+ | *Toda actividad en pausa o detenida puede | ||
+ | #volverse a poner en ejecución recuperarando su propio contexto tal cual lo dejó | ||
+ | #o ser eliminadas por el sistema operativo (de forma educada método finisied() o sin informar de ello. | ||
+ | *Una actividad tiene una serie de métodos protegidos que se pueden sobreescribir para obtener información sobre los cambios de estado. | ||
+ | |||
− | |||
;Creacion de la actividad | ;Creacion de la actividad | ||
onCreate() | onCreate() | ||
:Llamado cuando se crea una actividad por primera vez | :Llamado cuando se crea una actividad por primera vez | ||
:En este método se debe crear e instanciar los objetos que utiliza la aplicación | :En este método se debe crear e instanciar los objetos que utiliza la aplicación | ||
+ | :Este método solo se llamará una vez durante el ciclo de vida de una actividad | ||
;Actividad visible | ;Actividad visible | ||
onStart() | onStart() | ||
Línea 31: | Línea 49: | ||
;Actividad ya no es visible para el usuario | ;Actividad ya no es visible para el usuario | ||
onStop() | onStop() | ||
+ | :Una actividad entra en estado detenido | ||
+ | :Siempre estará precedido del método onPause() | ||
+ | :Aquí la actividad puede ser eliminada | ||
+ | |||
;Actividad se destruyeya no es visible para el usuario | ;Actividad se destruyeya no es visible para el usuario | ||
onDestroy() | onDestroy() | ||
+ | :Este método es llamado al final de la vida de la actividad si no ha sido eliminada en el método onPause() o onStop() | ||
:La actividad se destruye | :La actividad se destruye | ||
:Se deben de liberar los recursos antes de que la actividad sea destruida | :Se deben de liberar los recursos antes de que la actividad sea destruida | ||
;Actividad detenida se reanuda | ;Actividad detenida se reanuda | ||
onRestart() | onRestart() | ||
+ | :Siempre que una actividad detenida pasa a ser retomada (en ejecución) | ||
+ | :Siempre va precedida de onStop() | ||
+ | |||
[[Imagen:CicloVidaActividad.png]] | [[Imagen:CicloVidaActividad.png]] | ||
+ | <HR/> | ||
+ | *A continuación podemos analicar la siguiente imagen y sacar conclusiones | ||
+ | [[Imagen:EstadosCicloVidaActividad.png|600px|center]] | ||
===Código de ejemplo=== | ===Código de ejemplo=== | ||
Línea 84: | Línea 113: | ||
</RelativeLayout> | </RelativeLayout> | ||
+ | </source> | ||
*Ahora debemos cargar la actividad en el fichero '''''AndoridManifest.xml''''' | *Ahora debemos cargar la actividad en el fichero '''''AndoridManifest.xml''''' | ||
*Si editamos el fichero vemos que ya está cargado | *Si editamos el fichero vemos que ya está cargado | ||
*Existen asistentes para hacer las cosas de manera manual y no tocar el fuente xml | *Existen asistentes para hacer las cosas de manera manual y no tocar el fuente xml | ||
[[image:OpcionesManifest.png]] | [[image:OpcionesManifest.png]] | ||
+ | *En este caso ya tenemos la actividad cargada en el fichero correspondiente | ||
+ | <source lang=xml> | ||
+ | .... | ||
+ | <activity | ||
+ | android:name=".MainActivity" | ||
+ | android:label="@string/title_activity_main" > | ||
+ | <intent-filter> | ||
+ | <action android:name="android.intent.action.MAIN" /> | ||
+ | <category android:name="android.intent.category.LAUNCHER" /> | ||
+ | </intent-filter> | ||
+ | </activity> | ||
+ | ... | ||
</source> | </source> | ||
− | + | ===Modificando Activity.java=== | |
− | + | *Añadimos en la actividad que nos informe cada vez que se ejecuta un método de la clase '''''Activity''''' | |
<Source lang=java> | <Source lang=java> | ||
package com.example.activity101; | package com.example.activity101; | ||
Línea 149: | Línea 191: | ||
} | } | ||
− | |||
</Source> | </Source> | ||
+ | ===Comentando las modificaciones=== | ||
+ | <Source lang=java> | ||
+ | import android.util.Long | ||
+ | </Source> | ||
+ | Referencia http://developer.android.com/reference/android/util/Log.html | ||
+ | *Esta clase es para enviar mensajes a un fichero de log | ||
+ | *Usaremos el método '''''d()''''' | ||
+ | *Este método envía un mensaje de debug a un fichero log | ||
+ | <Source lang=java> | ||
+ | static int d(String tag, String msg) | ||
+ | </Source> | ||
+ | *donde '''''tag'''''identifica la actividad o clase que envía el mensaje | ||
+ | *donde '''''msg'''''Es el mensaje que queremos enviar | ||
+ | *Posteriormente sobreescribimos los métodos de la clase '''''Activity''''' | ||
+ | *Ejecutamos con F11 para debugar ('''''Perspectiva DDMS''''') | ||
+ | [[Imagen:perspectivaDDMS.png]] | ||
+ | *Observamos al interactuar con el teléfono como va pasando por todos los ciclos de vida | ||
+ | [[Imagen:EvolucionCicloVidaActividad.png|center]] |
Última revisión de 13:25 25 ene 2013
Activity, fragment e Intens
- Referencia
http://developer.android.com/guide/components/activities.html http://developer.android.com/reference/android/app/Activity.html
- Una aplicación puede tener una o más activity
- El objetivo de una activity es interactuar con el usuario
- Una activity tiene vida propia cumpliendo un ciclo de vida
- toda activity deriva de la clase Activity
Ciclo de vida de una activity
- Una actividad puede tener tres estados
- Ejecución
- estará en la parte superior de la pila de actividades
- aparecerá en pantalla. Esto implica que interactuará directamente con el usuario.
- Pausa
- Esta actividad está visible, pero parcialmente oculta por una actividad transparente o un cuadro de diálogo.
- Otro ejemplo es cuando la actividad es bloqueada por la pantalla del teléfono.
- Una actividad en pausa puede ser eliminada por el sistema si éste lo considera necesario (p.e. falta de memoria), sin aviso previo.
- Detenida
- Otra actividad pasa a estar en ejecución y nos oculta totalmente.
- No está visible en pantalla ni el usuario puede interactuar con ella.
- Toda actividad en pausa o detenida puede
- volverse a poner en ejecución recuperarando su propio contexto tal cual lo dejó
- o ser eliminadas por el sistema operativo (de forma educada método finisied() o sin informar de ello.
- Una actividad tiene una serie de métodos protegidos que se pueden sobreescribir para obtener información sobre los cambios de estado.
- Creacion de la actividad
onCreate()
- Llamado cuando se crea una actividad por primera vez
- En este método se debe crear e instanciar los objetos que utiliza la aplicación
- Este método solo se llamará una vez durante el ciclo de vida de una actividad
- Actividad visible
onStart()
- Se inicia una actividad (por primera vez o por que vuelve de segundo plano)
- Actividad interactuando con el usuario
onResume()
- Se inicia una actividad (por primera vez o por que vuelve de segundo plano)
- Se debe iniciar cualquier servicio o proceso que necesite que se esté ejecutando cuando mi proceso está en primer plano
- Actividad se detiene y otra se reanuda
onPause()
- La actividad deja de estar en primer plano (pasa a segundo plano o se va a destruir).
- Detener cualquier servicio o proceso que no se tiene que ejecutar si mi proceso no está en primer plano
- Actividad ya no es visible para el usuario
onStop()
- Una actividad entra en estado detenido
- Siempre estará precedido del método onPause()
- Aquí la actividad puede ser eliminada
- Actividad se destruyeya no es visible para el usuario
onDestroy()
- Este método es llamado al final de la vida de la actividad si no ha sido eliminada en el método onPause() o onStop()
- La actividad se destruye
- Se deben de liberar los recursos antes de que la actividad sea destruida
- Actividad detenida se reanuda
onRestart()
- Siempre que una actividad detenida pasa a ser retomada (en ejecución)
- Siempre va precedida de onStop()
- A continuación podemos analicar la siguiente imagen y sacar conclusiones
Código de ejemplo
- Creamos un nuevo proyecto llamado Actividad1
- Aceptamos por defecto las opciones
- Y vamos al fuente (src... MainActivity.java)
El sistema nos ha creado el siguiente contendio
package com.example.ciclovidaactividad; import android.os.Bundle; import android.app.Activity; import android.view.Menu; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } }
- La clase de actividad carga su componente de interfaz de usuario utilizando res/layout/activity_main.xml
- Lo podemos ver en modo gráfico y el contenido del fichero
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="@string/hello_world" tools:context=".MainActivity" /> </RelativeLayout>
- Ahora debemos cargar la actividad en el fichero AndoridManifest.xml
- Si editamos el fichero vemos que ya está cargado
- Existen asistentes para hacer las cosas de manera manual y no tocar el fuente xml
- En este caso ya tenemos la actividad cargada en el fichero correspondiente
.... <activity android:name=".MainActivity" android:label="@string/title_activity_main" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> ...
Modificando Activity.java
- Añadimos en la actividad que nos informe cada vez que se ejecuta un método de la clase Activity
package com.example.activity101; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.util.Log; public class MainActivity extends Activity { String tag="Ciclo de vida"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d(tag,"Dentro del evento onCreate()"); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } @Override public void onStart(){ super.onStart(); Log.d(tag,"Dentro del evento onStart()"); } @Override public void onRestart(){ super.onRestart(); Log.d(tag,"Dentro del evento onReset()"); } @Override public void onResume(){ super.onResume(); Log.d(tag,"Dentro del evento onResume()"); } @Override public void onPause(){ super.onPause(); Log.d(tag,"Dentro del evento onPause()"); } @Override public void onStop(){ super.onStop(); Log.d(tag,"Dentro del evento onStop()"); } @Override public void onDestroy(){ super.onDestroy(); Log.d(tag,"Dentro del evento onDestroy()"); } }
Comentando las modificaciones
import android.util.Long
Referencia http://developer.android.com/reference/android/util/Log.html
- Esta clase es para enviar mensajes a un fichero de log
- Usaremos el método d()
- Este método envía un mensaje de debug a un fichero log
static int d(String tag, String msg)
- donde tagidentifica la actividad o clase que envía el mensaje
- donde msgEs el mensaje que queremos enviar
- Posteriormente sobreescribimos los métodos de la clase Activity
- Ejecutamos con F11 para debugar (Perspectiva DDMS)
- Observamos al interactuar con el teléfono como va pasando por todos los ciclos de vida