Introdução à operação em segundo plano no iOS

O iOS regula muito o processamento em segundo plano e oferece três abordagens para implementá-lo:

  • Registrar uma Tarefa em Segundo Plano – se um aplicativo precisar concluir uma tarefa importante, ele poderá pedir ao iOS para não interromper a tarefa quando o aplicativo for movido para o segundo plano. Por exemplo, um aplicativo pode precisar concluir o registro em log em um usuário ou concluir o download de um arquivo grande.
  • Registrar como um aplicativo Background-Necessary – um aplicativo pode se registrar como um tipo específico de aplicativo que tenha requisitos de plano de fundo conhecidos e específicos, como Áudio , VoIP , Acessório Externo , Banca de Notícias e Local . Esses aplicativos têm privilégios de processamento contínuo em segundo plano, desde que estejam executando tarefas que estão dentro dos parâmetros do tipo de aplicativo registrado.
  • Habilitar Atualizações em segundo plano – os aplicativos podem disparar atualizações em segundo plano com o Monitoramento de Região ou escutando alterações significativas de localização. A partir do iOS 7, os aplicativos também podem se registrar para atualizar o conteúdo em segundo plano usando Busca em Segundo Plano ou Notificações Remotas .

Estados de aplicativo e métodos delegados de aplicativo

Antes de nos aprofundarmos no código para processamento em segundo plano no iOS, precisamos entender como o backgrounding afeta o ciclo de vida de um aplicativo iOS.

O ciclo de vida do aplicativo iOS é uma coleção de estados e métodos de aplicativo para mover entre eles. Um aplicativo faz a transição entre estados com base no comportamento do usuário e nos requisitos de segundo plano do aplicativo. O movimento é ilustrado pelo seguinte diagrama:

Diagrama de estados de aplicativo e métodos delegados de aplicativo

  • Não está em execução – o aplicativo ainda não foi iniciado no dispositivo.
  • Em execução/Ativo – o aplicativo está na tela e está executando o código em primeiro plano.
  • Inativo – o aplicativo é interrompido por uma chamada telefônica de entrada, texto ou outra interrupção.
  • Em segundo plano – o aplicativo passa para o segundo plano e continua executando o código em segundo plano.
  • Suspenso – se o aplicativo não tiver nenhum código para ser executado em segundo plano ou se todo o código tiver sido concluído, o aplicativo será Suspenso pelo sistema operacional. O processo de um aplicativo suspenso é mantido ativo, mas o aplicativo não pode executar nenhum código nesse estado.
  • Retornar para Não Em Execução/Término (Raro) – ocasionalmente, o processo do aplicativo é destruído e o aplicativo retorna ao estado Não Em Execução . Isso acontece em situações de pouca memória ou se o usuário encerra manualmente o aplicativo.

Desde a introdução do suporte à multitarefa, o iOS raramente encerra aplicativos ociosos e, em vez disso, mantém seus processos Suspensos na memória. Manter o processo de um aplicativo ativo garante que o aplicativo seja iniciado rapidamente na próxima vez que o usuário o abrir. Isso também significa que os aplicativos podem ser movidos livremente do estado Suspenso de volta para o estado Em segundo plano sem usar recursos do sistema. O iOS 7 explora esse recurso com novas APIs que permitem que os aplicativos pausem tarefas em segundo plano quando o dispositivo entra em suspensão, atualizam o conteúdo diretamente do segundo plano sem interação do usuário e muito mais. Abordaremos as novas APIs em Técnicas de Backgrounding do iOS.

Métodos de ciclo de vida do aplicativo

Quando um aplicativo altera o estado, o iOS notifica o aplicativo por meio de métodos de evento na AppDelegate classe :

  • OnActivated - Isso é chamado na primeira vez que o aplicativo é iniciado e sempre que o aplicativo volta para o primeiro plano. Esse é o lugar para colocar o código que precisa ser executado sempre que o aplicativo é aberto.
  • OnResignActivation – Se o usuário receber uma interrupção, como uma mensagem de texto ou chamada telefônica, esse método será chamado e o aplicativo será temporariamente inativado. Se o usuário aceitar a chamada telefônica, o aplicativo será enviado para o segundo plano.
  • DidEnterBackground – Chamado quando o aplicativo entra no estado em segundo plano, esse método fornece a um aplicativo cerca de cinco segundos para se preparar para uma possível terminação. Use esse tempo para salvar dados e tarefas do usuário e remover informações confidenciais da tela.
  • WillEnterForeground - Quando um usuário retorna a um aplicativo em segundo plano ou suspenso e o inicia em primeiro plano, WillEnterForeground é chamado. Esse é o momento de preparar o aplicativo para colocar o primeiro plano reidratar qualquer estado salvo durante DidEnterBackground . OnActivated será chamado imediatamente após a conclusão desse método.
  • WillTerminate - O aplicativo é desligado e seu processo é destruído. Esse método só será chamado se a multitarefa não estiver disponível no dispositivo ou na versão do sistema operacional, se a memória estiver baixa ou se o usuário encerrar manualmente um aplicativo em segundo plano. Observe que aplicativos suspensos que são encerrados não chamarão WillTerminate .

O diagrama a seguir ilustra como os estados do aplicativo e os métodos de ciclo de vida se encaixam:

Este diagrama ilustra como os estados do aplicativo e os métodos de ciclo de vida se encaixam

Controles de usuário para backgrounding no iOS

O iOS 7 introduziu vários recursos para dar aos usuários mais controle sobre o estado em segundo plano de um aplicativo. A configuração Alternador de Aplicativos e Atualização de Aplicativo em Segundo Plano afetam o Ciclo de Vida do Aplicativo.

Alternador de Aplicativos

O Comutador de Aplicativos é um recurso de controle importante introduzido no iOS 7. Ele é iniciado tocando duas vezes no botão Página Inicial e mostra os aplicativos cujos processos estão ativos:

Mover-se entre aplicativos usando o Alternador de Aplicativos

Usando o Alternador de Aplicativos, os usuários podem percorrer instantâneos de todos os aplicativos em segundo plano e suspensos. Tocar em um aplicativo o inicia em primeiro plano. Passar o dedo para cima remove o aplicativo da tela de fundo, encerrando seu processo. Examinaremos mais detalhadamente o Comutador de Aplicativos na Demonstração do Ciclo de Vida do Aplicativo iOS na próxima seção.

Importante

O Alternador de Aplicativos não mostra uma diferença entre aplicativos em segundo plano e suspensos.

Configurações de atualização de aplicativo em segundo plano

O iOS 7 aumenta o controle do usuário sobre o Ciclo de Vida do Aplicativo, permitindo que os usuários optem por não usar o backgrounding para aplicativos registrados para processamento em segundo plano. Isso não impede que os aplicativos executem tarefas em segundo plano.

Os usuários podem alterar essa configuração navegando até Configurações > Atualização geral > do aplicativo em segundo plano e editando os privilégios de tela de fundo para um aplicativo selecionado. Se a Atualização de Aplicativo em Segundo Plano estiver definida como desativada, o aplicativo será suspenso imediatamente ao entrar em segundo plano e impedido de realizar qualquer processamento em segundo plano:

Configurações de atualização de aplicativo em segundo plano

Os desenvolvedores podem marcar o status de Aplicativo de Atualização em Segundo Plano com a BackgroundRefreshStatus API. Para obter um exemplo, consulte a receita Verificar Configuração de Atualização em Segundo Plano.

Abordamos os conceitos básicos do ciclo de vida do aplicativo iOS e os recursos para controlar o ciclo de vida do aplicativo. Em seguida, vamos ver o ciclo de vida do aplicativo iOS em ação.