Qual é o delegado adequado a ser implementado quando um aplicativo está sendo ativado em segundo plano e você deseja prepará-lo para ser ativo?
applicationWillEnterForeground vs applicationDidBecomeActive - Qual é a diferença?
Qual é o delegado adequado a ser implementado para quando um aplicativo entra em suspensão e você deseja prepará-lo para limpar e salvar dados?
applicationWillResignActive vs. applicationDidEnterBackground - Qual é a diferença?
Além disso, notei que applicationWillResignActive é chamado quando um SMS ou chamada é recebida, mas o usuário escolhe clicar em OK e continuar. Não quero que meu aplicativo execute nenhuma ação nesses casos. Eu só quero que ele continue funcionando sem nenhuma limpeza intermediária, pois o usuário não saiu do aplicativo. Portanto, acho que faz mais sentido fazer o trabalho de limpeza apenas no applicationDidEnterBackground.
Agradeço sua opinião sobre as práticas recomendadas a seguir na escolha de quais delegados implementar para acordar e dormir, além de considerar eventos como ser interrompido por SMS / chamadas.
obrigado
-applicationWillEnterForeground:
não será chamado apenas-applicationDidEnterBackground:
(suponha que o iOS não pense que é um relançamento).applicationWillEnterForeground:
será chamado sempre de segundo plano para primeiro plano ?! Não consigo encontrar um caso que NÃO seja chamado SEMapplicationDidBecomeActive
posteriormente.Gerenciar o ciclo de vida do seu aplicativo é útil para suas perguntas. Para um conceito rápido, você pode ver figuras nesse documento. Você também pode ler o comentário do código gerado pelo Assistente de XCode. Listados da seguinte forma:
Para explicações mais detalhadas, consulte o documento oficial do UIApplicationDelegate
fonte
Eu ainda estava um pouco confuso com a resposta de Dano, então fiz um pequeno teste para obter o fluxo de eventos em certos cenários para minha referência, mas pode ser útil para você também. Isso é para aplicativos que NÃO usam
UIApplicationExitsOnSuspend
em seu info.plist. Isso foi realizado em um simulador do iOS 8 + confirmado com o dispositivo iOS 7. Desculpe os nomes dos manipuladores de eventos do Xamarin. Eles são muito parecidos.Sim,
DidEnterBackground
é chamado duas vezes no dispositivo iOS7. Nas duas vezes, o estado UIApplication é Background. No entanto, o simulador do iOS 8 não. Isso precisa ser testado no dispositivo iOS 8. Atualizo minha resposta quando coloco minha mão nela, ou alguém pode confirmar.fonte
applicationWillEnterForeground
é chamado:quando o aplicativo é reiniciado (vem do plano de fundo para o primeiro plano) Esse método não é chamado quando o aplicativo é iniciado pela primeira vez, ou seja, quando
applicationDidFinishLaunch
é chamado, mas somente quando vem do plano de fundoapplicationDidBecomeActive
applicationDidBecomeActive
é chamadoquando o aplicativo for iniciado pela primeira vez depois
didFinishLaunching
depois,applicationWillEnterForeground
se não houver URL para manipular. depoisapplication:handleOpenURL:
é chamado. afterapplicationWillResignActive
if o usuário ignora a interrupção como uma ligação ou SMS. depois de desaparecer do alertView em qualquer lugar do aplicativofonte
applicationWillResignActive é chamado quando o sistema está solicitando permissões. (no iOS 10). Apenas no caso de alguém ter o mesmo problema que eu ...
fonte
No iOS 8 ou superior, há uma diferença sutil, mas importante, para atender chamadas.
No iOS 7, se o usuário atender a chamada, applicationWillResignActive: e applicationDidEnterBackground: serão chamados. Mas no iOS 8 ou superior, apenas applicationWillResignActive: é chamado.
fonte
Para iOS 13+, os seguintes métodos serão executados:
fonte