Ciclo de vida de la aplicación iOS

1. Introducción detallada de AppDelegate:

Cada aplicación de iPhone tiene una UIApplication. UIApplication es el comienzo de la aplicación de iPhone y es responsable de inicializar y mostrar UIWindow, y es responsable de cargar la primera UIView de la aplicación en el formulario UIWindow. Otra tarea de UIApplication es ayudar a administrar el ciclo de vida de la aplicación, y UIApplication realiza esta tarea a través de una clase de proxy llamada UIApplicationDelegate. Aunque UIApplication es responsable de recibir eventos, UIApplicationDelegate determina cómo responde la aplicación a estos eventos. Los eventos que UIApplicationDelegate puede manejar incluyen eventos del ciclo de vida de la aplicación (como el inicio y cierre del programa), eventos del sistema (como llamadas entrantes, advertencias de notas), Este artículo presentará cómo cargar UIView de la aplicación en UIWindow y cómo usar UIApplicationDelegate para manejar eventos del sistema.

  • Antes de iOS13, AppDelegate era el único responsable de manejar el ciclo de vida de la aplicación y el ciclo de vida de la interfaz de usuario;
  • Después de iOS13, las responsabilidades de AppDelegate son:
  1. Manejar el ciclo de vida de la aplicación;
  2. El nuevo ciclo de vida de la sesión de escena y el ciclo de vida de la interfaz de usuario se entregan al nuevo delegado de escena.

2. Introducción al ciclo de vida de la aplicación:

1. Estado de la solicitud:
  • No en ejecución: No en ejecución, el programa no se ha iniciado.

  • Inactivo: Inactivo, el programa se ejecuta en primer plano, pero no recibe ningún evento, o está ocupado por la fuerza con otras tareas, como una llamada repentina, el teléfono bloquea automáticamente la pantalla cuando el programa está en primer plano, etc. El programa normalmente permanece en este estado sin manejo de eventos.

  • Activo: Activado, el programa se ejecuta en primer plano y recibe eventos. Este también es un modo normal para la recepción.

  • Fondo: el programa está en segundo plano pero puede ejecutar código. Después de que la mayoría de los programas ingresan al estado de fondo, solo permanecerán en el estado de fondo por un período de tiempo. Cuando se acabe el tiempo, entrarán en el estado suspendido (Suspendido) . Algunos programas pueden permanecer en el estado de fondo durante mucho tiempo sin entrar en el estado suspendido (Suspended) después de solicitudes especiales.

  • Suspendido: suspendido, el programa no puede ejecutar código en segundo plano. El sistema cambiará automáticamente el programa en segundo plano a este estado sin emitir una notificación. Cuando se suspende, el programa aún reside en la memoria. Cuando la memoria del sistema es insuficiente, el sistema borrará los programas bloqueados para proporcionar más memoria para los programas en primer plano.

    [Error en la transferencia de la imagen del enlace externo. El sitio de origen puede tener un mecanismo anti-leeching. Se recomienda guardar la imagen y cargarla directamente (img-ChHg12ht-1641890651119)(/Users/yichen/Library/Application Support/typora-user -imagenes/imagen-20211224134019851 .png)]

2. Algunos métodos en AppDelegate

(1) finalizará el lanzamiento :

//willFinishLaunching:程序将要完成启动。只在程序启动时执行一次。launchOptions:存存储程序启动的原因。
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    return YES;
}

(2) didFinishLaunching :

didFinishLaunching es el último estado ejecutado antes de que la aplicación muestre la interfaz al usuario. Por supuesto, podemos completar alguna inicialización básica en este método, pero debe ser una operación de inicialización ligera; de lo contrario, el tiempo de inicio del programa será largo.

//didFinishLaunching是在app显示界面给用户之前最后执行的状态,理所当然我们可以在这个方法内完成一些基本的初始化,但是应该是轻量级的初始化操作,不然会导致程序启动时间长,影响用户体验。
//例如:
//不使用StoryBoard,需要配置window
//第三方登录sdk注册,以及很多第三方sdk的初始化配置
//判断程序接下来的业务逻辑,播不播放引导图片?播不播放开屏广告?有没有登录?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //若用户直接启动,launchOptions内无数据。
 
    //若由其他程序通过openURL:启动。
    //launchOptions中UIApplicationLaunchOptionsURLKey的数据为openURL:的参数url。
    //launchOptions中UIApplicationLaunchOptionsSourceApplicationKey的数据为启动本程序的源程序的bundle ID(NSString)。
    NSURL *url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey];
    if (url) {
        [self launchOptionsWithURL:url];
    }
    
    NSString *bundleId = [launchOptions objectForKey:UIApplicationLaunchOptionsSourceApplicationKey];
    if (bundleId) {
        [self launchOptionsWithBundleId:bundleId];
    }
    //若由远程通知启动。
    //launchOptions中UIApplicationLaunchOptionsRemoteNotificationKey对应数据为启动本程序的远程通知信息useinfo(NSDictionary)。
    NSDictionary *useinfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    if (useinfo) {
        [self launchOptionsWithUseinfo:useinfo];
    }
    
    return YES;
}

(3) Se volvió activo :

DidBecomeActive : El programa ha sido activado. Se llama cuando el programa está en primer plano: cuando el programa se inicia por primera vez y cuando vuelve al primer plano desde el fondo.

Si el programa estaba en segundo plano antes, puede volver a recuperar los datos y actualizar la interfaz de usuario con este método.

//程序第一次启动,从后台到前台时调用。
- (void)applicationDidBecomeActive:(UIApplication *)application {
    //程序进入前台时,记录当前时间
    
}

(4) WillResignActive :

WillResignActive : el programa está a punto de quedar inactivo. Se llama al programa cuando está en primer plano: hay una llamada entrante, el teléfono está bloqueado, etc. Si el programa está ocupado por la fuerza con otras tareas, se llamará a este método, que también se denomina método de interrupción.

- (void)applicationWillResignActive:(UIApplication *)application{
    //程序准备进入后台通知相关VC 记录当前时间
}

(5) DidEnterBackground :

La función es:

  • Liberar recursos compartidos
  • Guardar datos de usuario (escribir en el disco duro)
  • temporizador de vacío
  • Guarde suficiente estado del programa para restaurarlo la próxima vez
//程序已经进入后台时调用
- (void)applicationDidEnterBackground:(UIApplication *)application {
	//
}

**(6)Entrará en primer plano **:

WillEnterForeground : el programa entrará en primer plano. Se llama cuando el programa pasa al primer plano desde el fondo. WillEnterForeground se utiliza principalmente para deshacer operaciones realizadas en WillResignActive .

//程序将要进入前台。程序从后台进入前台时调用。
-(void)applicationWillEnterForeground:(UIApplication *)application {

}

(7) Terminará :

WillTerminate : El programa finalizará. Llamado antes de la finalización del programa.

//目的就是为了保留一些重要的数据,方便下次启动后的恢复,达到一种让用户感觉该程序永远运行在后台从来没被终止过的感觉
- (void)applicationWillTerminate:(UIApplication *)application{
  
}
3. Período de tiempo y secuencia de interacción.

programa inicial:

  • willFinishLaunchingWithOptions : se llama solo una vez cuando se inicia el programa.
  • didFinishLaunchingWithOptions : El programa ha completado su inicio y se mostrará la interfaz. Se ejecuta solo una vez cuando se inicia el programa.
  • DidBecomeActive : Se llama cuando el programa está en primer plano: cuando el programa se inicia por primera vez y cuando vuelve al primer plano desde el fondo.

La recepción pasa a un segundo plano :

  • WillResignActive : el programa está a punto de quedar inactivo. Se llama al programa cuando está en primer plano: hay una llamada entrante, el teléfono está bloqueado, etc. Este método se llamará cuando el programa esté ocupado por la fuerza con otras tareas, por lo que este método también se denomina método de llamada de interrupción del programa.
  • DidEnterBackground : El programa ha entrado en segundo plano. Se llama cuando el programa pasa al fondo desde el primer plano.

Ingrese a la recepción desde el fondo :

  • WillEnterForeground : el programa entrará en primer plano. Se llama cuando el programa pasa al primer plano desde el fondo.
  • DidBecomeActive : Se llama al regresar del fondo al primer plano.

Terminar el programa :

  • WillTerminate : El programa finalizará. Llamado antes de la finalización del programa.

Supongo que te gusta

Origin blog.csdn.net/weixin_42357849/article/details/122436270
Recomendado
Clasificación