Diferencia entre revisiones de «Usuario:ManuelRomero/Actividades»

De WikiEducator
Saltar a: navegación, buscar
(Ciclo de vida de una actividad)
(Ciclo de vida de una activity)
 
(7 revisiones intermedias por el mismo usuario no mostrado)
Línea 2: Línea 2:
 
<br>  
 
<br>  
  
===Actividades, fragmentos e Intens===
+
===Activity, fragment e Intens===
 
<br/>
 
<br/>
{{Definicion|'''''Actividad''''' es una ventana que contiene la interfaz de usuario de una aplicacion}}
+
{{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 actividades
+
*Una aplicación puede tener una o más activity
*El objetivo de una actividad es interactuar con el usuario
+
*El objetivo de una activity es interactuar con el usuario
*Una actividad tiene vida propia cumpliendo un ciclo de vida
+
*Una activity tiene vida propia cumpliendo un ciclo de vida
#toda actividad deriva de la clase '''''Activity'''''
+
#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.
 +
 
  
===Ciclo de vida de una actividad===
 
 
;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 65: Línea 94:
 
     }
 
     }
 
}
 
}
*La clase de actividad carga su componente de interfaz  de usuario utilizanndo '''''res/layout/activity_main.xml'''''
+
</source>
 +
*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
 
*Lo podemos ver en modo gráfico y el contenido del fichero
 
[[image:OpcionesLayout.png]]
 
[[image:OpcionesLayout.png]]
Línea 83: 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===
</source>
+
*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 148: 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 12:25 25 ene 2013



Activity, fragment e Intens



Icon define.gif

Definición

Activity es una ventana que contiene la interfaz de usuario de una aplicación


  1. 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
  1. 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
  1. volverse a poner en ejecución recuperarando su propio contexto tal cual lo dejó
  2. 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()

CicloVidaActividad.png


  • A continuación podemos analicar la siguiente imagen y sacar conclusiones
EstadosCicloVidaActividad.png

Código de ejemplo

  1. Creamos un nuevo proyecto llamado Actividad1
  2. Aceptamos por defecto las opciones
  3. 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

OpcionesLayout.png

<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

OpcionesManifest.png

  • 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)

PerspectivaDDMS.png

  • Observamos al interactuar con el teléfono como va pasando por todos los ciclos de vida
EvolucionCicloVidaActividad.png