6. Estructura de una app y ciclo de vida¶
Piezas de una app Android¶
| Pieza | Para qué sirve |
|---|---|
AndroidManifest.xml |
Declara la app: nombre, icono, pantallas (activities), permisos |
| Activity | Una pantalla (o punto de entrada) de la app |
Recursos (res/) |
Textos, colores, imágenes, iconos |
| Composables | Funciones que describen la interfaz |
| Gradle | Compila y gestiona dependencias |
La jerarquía básica de clases es: ComponentActivity → tu MainActivity, que sobrescribe métodos del ciclo de vida.
Modelo de estados: el ciclo de vida¶
Una pantalla (Activity) pasa por estados según lo que haga el usuario o el sistema:
onCreate -> onStart -> onResume (la app está visible y activa)
|
onPause (pierde el foco: otra pantalla encima)
|
onStop (ya no es visible)
/ \
onRestart -> onStart onDestroy (se cierra)
Si el usuario vuelve a una pantalla que estaba detenida, se llama a onRestart y se repite onStart → onResume.
| Método | Cuándo se llama |
|---|---|
onCreate |
Se crea la pantalla (inicializar la interfaz) |
onStart |
Va a hacerse visible |
onResume |
Está en primer plano e interactiva |
onPause |
Pierde el foco |
onStop |
Deja de ser visible |
onDestroy |
Se destruye |
Para observarlo, registra mensajes:
class MainActivity : ComponentActivity() {
private val etiqueta = "CicloDeVida"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.d(etiqueta, "onCreate")
setContent { Text("Hola, móvil") }
}
override fun onStart() { super.onStart(); Log.d(etiqueta, "onStart") }
override fun onResume() { super.onResume(); Log.d(etiqueta, "onResume") }
override fun onPause() { super.onPause(); Log.d(etiqueta, "onPause") }
override fun onStop() { super.onStop(); Log.d(etiqueta, "onStop") }
override fun onDestroy() { super.onDestroy(); Log.d(etiqueta, "onDestroy") }
}
Los mensajes aparecen en Logcat. Prueba a girar el móvil, a pulsar Inicio y a volver: verás cómo cambian los estados.
Girar la pantalla destruye y recrea la pantalla
Al rotar, Android destruye la Activity y la crea de nuevo. Lo que solo estaba en variables locales se pierde. En Compose se conserva con rememberSaveable o con un ViewModel.
var contador by rememberSaveable { mutableStateOf(0) }
Modificar una app existente¶
Para cambiar una app que ya existe:
- Ábrela en Android Studio y deja que Gradle sincronice.
- Localiza la pantalla (
MainActivityo el composable) y el recurso que quieres cambiar. - Haz el cambio, ejecútalo y comprueba en el emulador.
- Usa control de versiones (ver Git) para poder volver atrás.