Sobes.tech
Junior

Podes falar sobre o ciclo de vida de uma aplicação no iOS?

sobes.tech IA

Resposta da IA

A aplicação passa pelos seguintes estados:

  • Não em execução: A aplicação não está em execução.
  • Inativa: A aplicação está em execução, mas não recebe eventos (por exemplo, durante uma chamada de entrada ou ao passar para o plano de fundo).
  • Ativa: A aplicação está ativa e totalmente funcional. Recebe todos os eventos.
  • Fundo: A aplicação está em modo de fundo. Pode executar código limitado ou ser suspensa.
  • Suspensa: A aplicação em modo de fundo, mas sua execução está suspensa pelo sistema para economizar recursos.

As transições entre estados e os eventos associados são geridos pelo framework do sistema UIKit (ou SwiftUI) e pelo delegado da aplicação (UIApplicationDelegate ou @main Struct em SwiftUI).

Métodos chave do delegado da aplicação:

  • application:didFinishLaunchingWithOptions:: A aplicação foi lançada.
  • applicationDidBecomeActive:: A aplicação passa a estar ativa.
  • applicationWillResignActive:: A aplicação passa de estar ativa (por exemplo, durante uma chamada de entrada).
  • applicationDidEnterBackground:: A aplicação passa para o modo de fundo.
  • applicationWillEnterForeground:: A aplicação passa do fundo para o ativo.
  • applicationWillTerminate:: A aplicação termina.

Exemplo de uso no App Delegate:

import UIKit

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Executa ao iniciar a aplicação
        print("Aplicação iniciada")
        return true
    }

    func applicationDidBecomeActive(_ application: UIApplication) {
        // A aplicação tornou-se ativa
        print("A aplicação tornou-se ativa")
    }

    func applicationWillResignActive(_ application: UIApplication) {
        // A aplicação passa de ativa
        print("A aplicação passa de ativa")
    }

    func applicationDidEnterBackground(_ application: UIApplication) {
        // A aplicação passou para o fundo
        print("A aplicação passou para o fundo")
    }

    func applicationWillEnterForeground(_ application: UIApplication) {
        // A aplicação passa para primeiro plano
        print("A aplicação passa para primeiro plano")
    }

    func applicationWillTerminate(_ application: UIApplication) {
        // A aplicação termina
        print("A aplicação termina")
    }
}

Em SwiftUI, o ciclo de vida é gerido com a estrutura com @main e métodos como onAppear, onDisappear, onChange. Valores de Ambiente também permitem acompanhar o estado da cena (ScenePhase).

import SwiftUI

@main
struct MyApp: App {
    @Environment(\.scenePhase) var scenePhase // Acompanhamento do estado da cena

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
        .onChange(of: scenePhase) { newPhase in
            if newPhase == .active {
                // Cena tornou-se ativa
                print("Cena tornou-se ativa")
            } else if newPhase == .inactive {
                // Cena tornou-se inativa
                print("Cena tornou-se inativa")
            } else if newPhase == .background {
                // Cena passou para o modo de fundo
                print("Cena passou para o modo de fundo")
            }
        }
    }
}