Está en la página 1de 10

Laboratorio de Tecnologías Móviles

Sesión 3:
Programación de actividades

I. OBJETIVOS

• Aprender a especificar la gestión de una actividad.


• Comprender la generación de los estados del ciclo de vida de una actividad.
• Comprender cómo una actividad es iniciada y dada de baja.

II. TEMAS A TRATAR

• Actividad
• Creación de una actividad
• Declaración de una actividad
• Ciclo de vida
• Inicio de una actividad

III. MARCO TEORICO

ACTIVIDAD

Una actividad es un componente de aplicación que proporciona una pantalla con la cual los
usuarios pueden interactuar con la finalidad de realizar alguna acción (digitar un número de
teléfono, abrir una imagen, etc.). Cada actividad tiene una ventana en la que se dibuja la interfaz
de usuario.
Una aplicación consta generalmente de varias actividades. Típicamente, una actividad en una
aplicación es especificado como la actividad principal, la cual es presentado al usuario cuando se
lanza la aplicación por vez primera. Cada actividad puede luego iniciar otra actividad con el fin de
realizar diferentes acciones. Cada vez que una nueva actividad se inicia, la actividad previa es
detenida, pero el sistema preserva la actividad en una pila. Cuando una nueva actividad se inicia,
se inserta en la pila y se centra en el usuario.
Cuando una actividad es detenida a causa del inicio de una nueva actividad, es notificado de este
cambio en el estado a través de los métodos de llamada del ciclo de vida de la actividad. Existen
varios métodos de llamada que una actividad puede recibir, debido a cambios en el estado, y cada
llamada proporciona la oportunidad de realizar un trabajo específico apropiado para el cambio de
estado.

CREACIÓN DE UNA ACTIVIDAD

Para crear una actividad se debe crear una subclase de AppCompatActivity. En esta subclase será
necesario implementar métodos de llamada para que las realice el sistema cuando la actividad
pase entre varios estados de su ciclo de vida. Los dos métodos de llamada más importantes son:
onCreate():Este método es llamado cuando se crea una actividad. Se deben inicializar los
componentes esenciales de la actividad. Para definir el diseño para la interfaz de usuario de la
actividad debe invocarse a setContentView().
onPause(): El sistema llama a este método cuando el usuario deja la actividad (aunque no siempre
significa que la actividad sea destruida). Es usualmente donde se debería abordar cualquier
cambio que debería persistir más allá de la actual sesión del usuario.

1 José Sulla Torres - Jorge Martínez Muñoz


Laboratorio de Tecnologías Móviles

DECLARACIÓN DE UNA ACTIVIDAD

Una actividad debe ser declarada en el archivo manifest.xml con el fin de que sea accesible al
sistema
<manifest ... >
<application ... >
<activity android:name=".ExampleActivity" />
...
</application ... >
...
</manifest

Hay varios atributos que pueden ser especificados para la actividad tales como la etiqueta, el icono
para la actividad, o un tema para el estilo de la interfaz gráfica de la actividad. El atributo
android:name es el único atributo requerido para especificar el nombre de la clase de la actividad.
Una vez que se publica la aplicación, este nombre no debe ser cambiado

CICLO DE VIDA

La gestión del ciclo de vida de las actividades para implementar los métodos de llamada es de
importancia para desarrollar aplicaciones robustas y flexibles. El ciclo de vida de una actividad está
directamente relacionado con la actuación de otras actividades. Una actividad comprende
inicialmente tres estados:
• Reanudado: La actividad se encuentra en primer plano y tienen el foco del usuario
• Pausado: Otra actividad se encuentra en primer plano y tiene el foco, pero esta es aún
visible. Esto es que otra actividad se encuentra visiblemente sobre ella o no cubre la
pantalla completamente. La actividad se encuentra viva, pero puede ser destruida por el
sistema en situaciones de baja batería.
• Detenido: la actividad es totalmente opacada por otra actividad, encontrándose en segundo
plano. Una actividad detenida es una actividad viva, sin embargo, no es visible al usuario y
puede ser aniquilada por el sistema en casos de insuficiencia de memoria

La transición de un estado a otro se notifica a través de varios métodos de llamada, los cuales
pueden ser sobre-escritos para realizar un trabajo apropiado según el cambio de estado de la
actividad. A continuación, se muestra la codificación de los diferentes métodos del ciclo de vida de
una actividad.

public class ExampleActivity extends AppCompatActivity {


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// The activity is being created.
}
@Override
protected void onStart() {
super.onStart();
// The activity is about to become visible.
}
@Override
protected void onResume() {
super.onResume();
// The activity has become visible (it is now "resumed").
}
@Override
protected void onPause() {
super.onPause();

2 José Sulla Torres - Jorge Martínez Muñoz


Laboratorio de Tecnologías Móviles

// Another activity is taking focus (this activity is about to be


"paused").
}
@Override
protected void onStop() {
super.onStop();
// The activity is no longer visible (it is now "stopped")
}
@Override
protected void onDestroy() {
super.onDestroy();
// The activity is about to be destroyed.
}
}

La figura de abajo muestra los bucles y los caminos que una actividad puede tomar entre estados.
Los rectángulos representan los métodos de llamada que se pueden implementar para realizar
operaciones cuando la actividad cambia entre estados.

INICIANDO UNA ACTIVIDAD

Se puede iniciar otra actividad llamando al método startActivity() pasando un Intent que describe
la actividad que se desea realizar. El intent especifica la actividad exacta que se desea iniciar o
describe el tipo de acción que se desea realizar (el sistema selecciona la actividad apropiada, el
cual puede ser incluso una aplicación diferente). Un intent puede también llevar pequeñas
cantidades de datos que pueden ser usadas por la actividad que es iniciada.

startActivity(new Intent("com.example.SegundaActivity"));

3 José Sulla Torres - Jorge Martínez Muñoz


Laboratorio de Tecnologías Móviles

IV. ACTIVIDADES (La práctica tiene una duración de 2 horas)

Crear un nuevo proyecto Android

1. Crea un nuevo proyecto Empty Activity, llene los datos que les solicita.
2. Para hacer el seguimiento de los estados de una actividad se va a ingresar una serie de
mensajes utilizando la herramienta de depuración llamada Dalvik Debug Monitor Server
(DDMS) el cual proporciona entre otros servicios, la posibilidad de mostrar los mensajes que se
desean imprimir, según se haya especificado de acuerdo con los estados de las actividades,
usando la clase Log. Para ello, copie en el archivo MainActivity.java el código encuadrado.

import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {


String eti = "CicloDeVida";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(eti,"En el evento onCreate()");
}

public void onStart()


{
super.onStart();
Log.d(eti,"En el evento onStart()");
}
public void onRestart()
{
super.onRestart();
Log.d(eti,"En el evento onRestart()");
}
public void onResume()
{
super.onResume();
Log.d(eti,"En el evento onResume()");
}
public void onPause()
{
super.onPause();
Log.d(eti,"En el evento onPause()");
}
public void onStop()
{
super.onStop();
Log.d(eti,"En el evento onStop()");
}
public void onDestroy()
{
super.onDestroy();
Log.d(eti,"En el evento onDestroy()");
}
}

4 José Sulla Torres - Jorge Martínez Muñoz


Laboratorio de Tecnologías Móviles

3. En el menú Run elija la opción Debug ‘app’ para iniciar el debug.

4. Cuando la actividad se carga por primera vez se debería ver algo muy similar a la imagen en la
pestaña Debug.

5. Si se hace click en el botón Back en el emulador Android, se puede observar los otros estados
en el debug.

Actividades usando Intents

1. Haga click derecho sobre el paquete donde se encuentra el código fuente y elija New / Activity
/ Empty Activity

2. Dele como nombre de SegundaActividad a la nueva Actividad

5 José Sulla Torres - Jorge Martínez Muñoz


Laboratorio de Tecnologías Móviles

3. En el archivo AndroidManifest.xml agregue la segunda actividad para que esta sea


reconocida en la aplicación.


<activity
android:label="Segunda Actividad"
android:name=".SegundaActividad"
android:exported="false">
<intent-filter>
<action android:name="com.example.SegundaActividad" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

4. Modifique el archivo activity_segunda_actividad.xml como sigue:

6 José Sulla Torres - Jorge Martínez Muñoz


Laboratorio de Tecnologías Móviles

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Esta es la Segunda Actividad!"
tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>

5. En el archivo activity_main.xml, Agregue un botón para llamar a la segunda Actividad. Añada


el siguiente código encuadrado:
...
<Button
android:id="@+id/btnMostrar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="188dp"
android:onClick="onClick"
android:text="@string/mostrar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

6. Modifique el archivo MainActivity.java como se muestra:


...
import android.content.Intent;
import android.view.View;

public class MainActivity extends AppCompatActivity {


...
public void onClick(View view) {
startActivity(new Intent("com.example.SegundaActividad"));
}
}

7. Ejecute su actividad.

7 José Sulla Torres - Jorge Martínez Muñoz


Laboratorio de Tecnologías Móviles

ProgressBar

8. De la Palettte / Widgets, arrastre un control ProgressBar (Horizontal) a la interfaz de la


segunda actividad. Coloque en la propiedad style: Widget.ProgressBar.Horizontal.
9.

10. En el archivo SegundaActivity.java agregue el siguiente código enmarcado:

import android.util.Log;
import android.widget.ProgressBar;

public class SegundaActivity extends AppCompatActivity{

protected static final int TIMER_RUNTIME = 10000;


protected boolean nbActivo;
protected ProgressBar nProgressBar;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.segundaactivity);

nProgressBar = (ProgressBar)findViewById(R.id.progressBar);
final Thread timerThread = new Thread(){
@Override
public void run(){
nbActivo = true;
try{
int espera1 = 0;
while(nbActivo && (espera1 < TIMER_RUNTIME)){
sleep(200);
if(nbActivo){
espera1 += 200;
actualizarProgress(espera1);
}
}
} catch(InterruptedException e){

} finally{
onContinuar();
}

8 José Sulla Torres - Jorge Martínez Muñoz


Laboratorio de Tecnologías Móviles

}
};
timerThread.start();
}

public void actualizarProgress(final int timePassed){


if(null != nProgressBar){
final int progress = nProgressBar.getMax() * timePassed
/TIMER_RUNTIME;
nProgressBar.setProgress(progress);
}
}

public void onContinuar(){


Log.d("mensajeFinal", "Su barra de progreso acaba de cargar");
}

11. Ejecute su actividad y verifique la carga de la actividad

9 José Sulla Torres - Jorge Martínez Muñoz


Laboratorio de Tecnologías Móviles

V. Ejercicios

Realice el informe donde resuelva los siguientes ejercicios:


1. Basado en la actividad desarrollada, adicione dos actividades donde una sea la de la
conversión de monedas y la otra incorpore un Navigator Drawer.
2. Adicione a su aplicación una vista progressBar para el llamado a cada actividad con un
mensaje de “carga completa”.

VI. Cuestionario

1. ¿Explique cómo se gestiona la pila de actividades al pasar de una de ellas hacia otra?
2. ¿Es posible pasar de un estado a otro sin mantener el flujo del ciclo de vida de la actividad
mostrado en el gráfico?

VII. Bibliografía y referencias

1. Luján Castillo, José Dimas, Android Studio. Aprende a desarrollar aplicaciones, AlfaOmega,
2018
2. https://developer.android.com/guide/components/activities/activity-lifecycle

10 José Sulla Torres - Jorge Martínez Muñoz

También podría gustarte