Ciclo de vida do aplicativo iOS

1. Introdução detalhada do AppDelegate:

Todo aplicativo para iPhone possui um UIApplication. UIApplication é o início do aplicativo para iPhone e é responsável por inicializar e exibir o UIWindow, e é responsável por carregar o primeiro UIView do aplicativo no formulário UIWindow. Outra tarefa do UIApplication é ajudar a gerenciar o ciclo de vida do aplicativo, e o UIApplication executa essa tarefa por meio de uma classe proxy chamada UIApplicationDelegate. Embora o UIApplicationDelegate seja responsável por receber eventos, o UIApplicationDelegate determina como o aplicativo responde a esses eventos.Os eventos que o UIApplicationDelegate pode manipular incluem eventos do ciclo de vida do aplicativo (como inicialização e desligamento do programa), eventos do sistema (como chamadas recebidas, avisos de notas), Este artigo apresentará como carregar o UIView do aplicativo no UIWindow e como usar UIApplicationDelegate para lidar com eventos do sistema.

  • Antes do iOS13, AppDelegate era o único responsável por lidar com o ciclo de vida do aplicativo e o ciclo de vida da IU;
  • Após o iOS13, as responsabilidades do AppDelegate são:
  1. Lidar com o ciclo de vida do aplicativo;
  2. O novo ciclo de vida da Sessão de Cena, o ciclo de vida da UI é entregue ao novo Delegado de Cena.

2. Introdução ao ciclo de vida da aplicação:

1. Situação da candidatura:
  • Não está em execução: Não está em execução, o programa não foi iniciado.

  • Inativo: Inativo, o programa está rodando em primeiro plano, mas não recebe nenhum evento, ou é ocupado à força por outras tarefas, como uma chamada repentina, o telefone bloqueia automaticamente a tela quando o programa está em primeiro plano, etc. O programa geralmente permanece neste estado sem manipulação de eventos.

  • Ativo: Ativado, o programa roda em primeiro plano e recebe eventos. Este também é um modo normal para a recepção.

  • Backgroud: O programa está em segundo plano, mas pode executar código. Depois que a maioria dos programas entra no estado de segundo plano, eles só permanecerão no estado de segundo plano por um período de tempo. Quando o tempo acabar, eles entrarão no estado suspenso (Suspenso) . Alguns programas podem permanecer no estado Backgroud por muito tempo sem entrar no estado suspenso (Suspenso) após solicitações especiais.

  • Suspenso: Suspenso, o programa não pode executar código em segundo plano. O sistema mudará automaticamente o programa em segundo plano para este estado sem emitir uma notificação. Quando suspenso, o programa ainda reside na memória. Quando a memória do sistema for insuficiente, o sistema limpará os programas travados para fornecer mais memória para os programas em primeiro plano.

    [Falha na transferência de imagem do link externo. O site de origem pode ter um mecanismo anti-leeching. Recomenda-se salvar a imagem e carregá-la diretamente (img-ChHg12ht-1641890651119)(/Users/yichen/Library/Application Support/typora-user -imagens/image-20211224134019851 .png)]

2. Alguns métodos em AppDelegate

(1) terminará o lançamento :

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

(2) didFinishLaunching :

didFinishLaunching é o último estado executado antes do aplicativo exibir a interface para o usuário. Claro, podemos concluir algumas inicializações básicas neste método, mas deve ser uma operação de inicialização leve, caso contrário, o tempo de inicialização do programa será longo.

//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) DidBecomeActive :

DidBecomeActive : O programa foi ativado. Chamado quando o programa está em primeiro plano: quando o programa é iniciado pela primeira vez e quando retorna ao primeiro plano vindo do segundo plano.

Se o programa estava em segundo plano antes, você pode buscar novamente os dados e atualizar a interface do usuário neste método.

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

(4) WillResignActive :

WillResignActive : O programa está prestes a ficar inativo. O programa é chamado quando está em primeiro plano: há uma chamada recebida, o telefone está bloqueado, etc. Se o programa for forçosamente ocupado por outras tarefas, este método será chamado, também chamado de método de interrupção.

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

(5) DidEnterBackground :

A função é:

  • Liberar recursos compartilhados
  • Salvar dados do usuário (gravar no disco rígido)
  • anular temporizador
  • Salve estado de programa suficiente para restaurar na próxima vez
//程序已经进入后台时调用
- (void)applicationDidEnterBackground:(UIApplication *)application {
	//
}

**(6)WillEnterForeground **:

WillEnterForeground : O programa entrará em primeiro plano. Chamado quando o programa entra em primeiro plano vindo do plano de fundo. WillEnterForeground é usado principalmente para desfazer operações feitas em WillResignActive .

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

}

(7) Terminará :

WillTerminate : O programa será encerrado. Chamado antes do encerramento do programa.

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

programa inicial:

  • willFinishLaunchingWithOptions : Chamado apenas uma vez quando o programa é iniciado.
  • didFinishLaunchingWithOptions : O programa foi iniciado e a interface será exibida. Executado apenas uma vez quando o programa é iniciado.
  • DidBecomeActive : Chamado quando o programa está em primeiro plano: quando o programa é iniciado pela primeira vez e quando retorna ao primeiro plano vindo do segundo plano.

A recepção entra em segundo plano :

  • WillResignActive : O programa está prestes a ficar inativo. O programa é chamado quando está em primeiro plano: há uma chamada recebida, o telefone está bloqueado, etc. Este método será chamado quando o programa for ocupado à força por outras tarefas, portanto, esse método também é chamado de método de chamada de interrupção do programa.
  • DidEnterBackground : O programa entrou em segundo plano. Chamado quando o programa entra em segundo plano vindo do primeiro plano.

Entre na recepção pelo fundo :

  • WillEnterForeground : O programa entrará em primeiro plano. Chamado quando o programa entra em primeiro plano vindo do plano de fundo.
  • DidBecomeActive : Chamado ao retornar do plano de fundo para o primeiro plano.

Encerre o programa :

  • WillTerminate : O programa será encerrado. Chamado antes do encerramento do programa.

Acho que você gosta

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