Junior
¿Puedes contarme sobre el ciclo de vida de una aplicación en iOS?
sobes.tech AI
Respuesta de la IA
La aplicación pasa por los siguientes estados:
- No en ejecución: La aplicación no está en ejecución.
- Inactiva: La aplicación está en ejecución, pero no recibe eventos (por ejemplo, durante una llamada entrante o al pasar a segundo plano).
- Activa: La aplicación está activa y completamente funcional. Recibe todos los eventos.
- Fondo: La aplicación está en modo de fondo. Puede ejecutar código limitado o suspenderse.
- Suspendida: La aplicación en modo de fondo, pero su ejecución está suspendida por el sistema para ahorrar recursos.
Las transiciones entre estados y los eventos asociados son gestionados por el marco del sistema UIKit (o SwiftUI) y el delegado de la aplicación (UIApplicationDelegate o @main Struct en SwiftUI).
Métodos clave del delegado de la aplicación:
application:didFinishLaunchingWithOptions:: La aplicación ha sido lanzada.applicationDidBecomeActive:: La aplicación pasa a estar activa.applicationWillResignActive:: La aplicación pasa de estar activa (por ejemplo, durante una llamada entrante).applicationDidEnterBackground:: La aplicación pasa a modo de fondo.applicationWillEnterForeground:: La aplicación pasa de fondo a activo.applicationWillTerminate:: La aplicación se cierra.
Ejemplo de uso en App Delegate:
import UIKit
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Se ejecuta al iniciar la aplicación
print("Aplicación iniciada")
return true
}
func applicationDidBecomeActive(_ application: UIApplication) {
// La aplicación se ha vuelto activa
print("La aplicación se ha vuelto activa")
}
func applicationWillResignActive(_ application: UIApplication) {
// La aplicación pasa de estar activa
print("La aplicación pasa de estar activa")
}
func applicationDidEnterBackground(_ application: UIApplication) {
// La aplicación ha pasado a segundo plano
print("La aplicación ha pasado a segundo plano")
}
func applicationWillEnterForeground(_ application: UIApplication) {
// La aplicación pasa a primer plano
print("La aplicación pasa a primer plano")
}
func applicationWillTerminate(_ application: UIApplication) {
// La aplicación se cierra
print("La aplicación se cierra")
}
}
En SwiftUI, el ciclo de vida se gestiona con la estructura con @main y métodos como onAppear, onDisappear, onChange. También están disponibles los Valores del Entorno, que permiten seguir el estado de la escena (ScenePhase).
import SwiftUI
@main
struct MyApp: App {
@Environment(\.scenePhase) var scenePhase // Seguimiento del estado de la escena
var body: some Scene {
WindowGroup {
ContentView()
}
.onChange(of: scenePhase) { newPhase in
if newPhase == .active {
// La escena se ha vuelto activa
print("La escena se ha vuelto activa")
} else if newPhase == .inactive {
// La escena se ha vuelto inactiva
print("La escena se ha vuelto inactiva")
} else if newPhase == .background {
// La escena ha pasado a modo de fondo
print("La escena ha pasado a modo de fondo")
}
}
}
}