Ciclo de vida no desenvolvimento móvel: o que é, quais etapas e como funciona

Autor: IT Sectr Publicado: 2026-03-02 Tempo de leitura: 9 min

O ciclo de vida de um aplicativo móvel determina como ele se comporta ao ser iniciado, minimizado, retornado do fundo e fechado. Neste artigo, abordaremos App Lifecycle (iOS), Activity Lifecycle (Android), Fragment Lifecycle, ViewController Lifecycle e LifecycleOwner. Compreender esses processos é fundamental para evitar vazamentos de memória, perda de dados e comportamento incorreto do aplicativo. Mais detalhes na documentação oficial do Android Activity Lifecycle.

Principais pontos

  • Activity Lifecycle (Android) inclui 7 métodos: onCreate → onStart → onResume → onPause → onStop → onDestroy + onRestart
  • ViewController Lifecycle (iOS) é chamado na ordem: viewDidLoad → viewWillAppear → viewDidAppear → viewWillDisappear → viewDidDisappear
  • iOS App Lifecycle tem 5 estados: Not Running, Inactive, Active, Background, Suspended
  • Fragment Lifecycle está vinculado à Activity, mas tem seus próprios métodos: onAttach, onCreateView, onViewCreated
  • LifecycleOwner (Android) permite inscrever-se em eventos do ciclo de vida via LifecycleObserver

Ciclo de vida do aplicativo (App Lifecycle)

Antes de analisar o ciclo de vida de telas individuais, é importante entender o ciclo de vida de todo o aplicativo. No iOS, o aplicativo passa por cinco estados: Not Running (não executando), Inactive (em segundo plano, não recebe eventos), Active (ativo), Background (em segundo plano, executando código) e Suspended (em segundo plano, código suspenso). Esses estados são gerenciados no AppDelegate através dos métodos applicationDidFinishLaunching, applicationDidBecomeActive, applicationWillResignActive, applicationDidEnterBackground e applicationWillTerminate.

No Android, o equivalente é o Application Lifecycle, rastreado através da interface Application.ActivityLifecycleCallbacks. No entanto, o Android foca mais no ciclo de vida de uma Activity — uma tela individual do aplicativo. Isso porque um aplicativo Android pode consistir em várias Activities, cada uma com seu próprio ciclo.

A abordagem moderna no Android é usar ProcessLifecycleOwner da biblioteca lifecycle-process. Ele permite rastrear o estado de todo o processo sem estar vinculado a uma Activity específica. No iOS, usa-se UISceneDelegate (desde o iOS 13) ou AppDelegate para rastrear o estado do aplicativo. O SceneDelegate lida com múltiplas janelas (multiwindow) no iPad. Compreender o App Lifecycle é especialmente importante para a IT Sectr ao desenvolver aplicativos com sincronização em segundo plano, streaming e chamadas VoIP.

Activity Lifecycle no Android

Activity é o componente básico de um aplicativo Android, representando uma tela. A Activity tem um ciclo de vida claramente definido gerenciado pelo sistema operacional em resposta a ações do usuário e eventos do sistema (rotação de tela, chamada recebida, pouca memória).

Método Descrição O que fazer
onCreateChamado uma vez quando a Activity é criadaInicialização da UI, findViewById, configuração do ViewModel
onStartActivity se torna visívelIniciar animações, registrar BroadCastReceiver
onResumeActivity ganha foco de entradaIniciar câmera, sensores, animações
onPauseActivity perde o foco (parcialmente visível)Salvar rascunhos, parar animações
onStopActivity não está visívelLiberar recursos, parar atualizações
onDestroyActivity é destruídaLimpar todas as referências, cancelar inscrição do LiveData
onRestartChamado antes de onStart após onStopReinicialização

Importante: onSaveInstanceState é chamado antes de onStop para salvar o estado temporário. A restauração ocorre no onCreate via Bundle savedInstanceState ou via SavedStateHandle no ViewModel. Sem o tratamento adequado do ciclo de vida, o aplicativo perderá todos os dados não salvos ao rotacionar a tela.

kotlin
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        outState.putString("draft", draftText)
    }
    override fun onDestroy() {
        super.onDestroy()
        // Отписка от всех подписок
    }
}

Activity Lifecycle no Jetpack Compose

No Jetpack Compose, o ciclo de vida da Activity permanece inalterado, mas o Compose fornece ferramentas adicionais: Composição ciente do ciclo de vida via LifecycleOwner, efeitos LifecycleEventEffect e DisposableEffect para limpeza automática de recursos na destruição.

Fragment Lifecycle em detalhes

Fragment no Android vive dentro de uma Activity e tem seu próprio ciclo de vida, que se sobrepõe parcialmente ao da Activity, mas adiciona novos métodos. Fragments podem ser adicionados, substituídos e removidos sem destruir a Activity, tornando-os mais flexíveis, mas também mais complexos.

Métodos principais do Fragment Lifecycle: onAttach — Fragment anexado à Activity (primeira chamada); onCreate — inicialização de dados; onCreateView — criação da View; onViewCreated — View criada, UI pode ser configurada; onStart — Fragment visível; onResume — Fragment em foco; onPause — Fragment perde o foco; onStop — Fragment não visível; onDestroyView — View destruída; onDestroy — Fragment destruído; onDetach — Fragment desanexado da Activity.

Diferença chave da Activity: onCreateView e onDestroyView podem ser chamados várias vezes (por exemplo, ao alternar TabLayout), enquanto onCreate é chamado uma vez. Consequentemente, a inicialização da View deve ser feita em onViewCreated, não em onCreateView. Recursos relacionados à View (como adaptadores RecyclerView) devem ser limpos em onDestroyView.

ViewController Lifecycle no iOS

UIViewController é a classe base para gerenciar telas no iOS. Seu ciclo de vida consiste em uma sequência de métodos que o UIKit chama automaticamente. Compreender esse ciclo é fundamental para a inicialização correta da UI, gerenciamento de dados e memória.

Método Quando é chamado Uso típico
loadViewQuando o View Controller carrega sua hierarquia de ViewInicialização personalizada sem storyboard
viewDidLoadApós a View ser carregada na memória (uma vez)Configuração da UI, carregar dados iniciais
viewWillAppearAntes da View aparecer na telaAtualizar dados, inscrever-se em notificações
viewDidAppearApós a View aparecer na telaIniciar animações, iniciar animações de rastreamento
viewWillDisappearAntes da View desaparecer da telaSalvar estado, cancelar inscrição de notificações
viewDidDisappearApós a View desaparecer da telaParar animações, liberar recursos
deallocQuando o View Controller é destruídoLiberar todos os recursos

Importante: viewDidLoad é chamado apenas uma vez na vida do View Controller. Para atualizar dados a cada aparição, use viewWillAppear. Se você se inscrever no NotificationCenter em viewWillAppear, certifique-se de cancelar a inscrição em viewDidDisappear para evitar vazamentos de memória.

SwiftUI Lifecycle

O SwiftUI gerencia o ciclo de vida das Views através de estruturas View. Em vez de métodos de callback, o SwiftUI usa os modificadores onAppear e onDisappear. Para estados globais do aplicativo, o App Lifecycle é usado através dos protocolos App e Scene. O SwiftUI gerencia automaticamente a criação e destruição das Views com base no estado, simplificando o desenvolvimento, mas exigindo compreensão da identidade e tempo de vida das Views.

swift
struct ContentView: View {
    var body: some View {
        Text("Hello")
            .onAppear {
                print("View появилась")
            }
            .onDisappear {
                print("View исчезла")
            }
    }
}

LifecycleOwner e LifecycleObserver no Android

LifecycleOwner é uma interface do Android Architecture Components que marca um objeto que possui um ciclo de vida (Activity, Fragment). LifecycleObserver é uma interface que permite a um objeto inscrever-se em eventos do LifecycleOwner. Juntos, eles formam a base do gerenciamento reativo do ciclo de vida no desenvolvimento Android moderno.

Em vez de chamar métodos explicitamente em onStart/onStop, recomenda-se usar DefaultLifecycleObserver (substituto do obsoleto LifecycleObserver com anotações @OnLifecycleEvent). Esta é a abordagem promovida pelo Google para ViewModel e outros componentes que precisam reagir ao ciclo de vida sem ter referências diretas à Activity ou Fragment.

kotlin
class MyObserver : DefaultLifecycleObserver {
    override fun onStart(owner: LifecycleOwner) {
        // Подписка на обновления
    }
    override fun onStop(owner: LifecycleOwner) {
        // Отписка
    }
}

Na IT Sectr, usamos LifecycleOwner em todos os projetos Android. O ViewModel se inscreve no LifecycleOwner da Activity através de viewModelScope e lifecycleScope, garantindo o cancelamento automático de corrotinas quando a Activity é destruída. Isso evita vazamentos de memória e torna o código mais limpo e seguro.

Perguntas frequentes

Quais estados uma Activity percorre no Android?

A Activity passa por seis estados: Created (onCreate), Started (onStart), Resumed (onResume), Paused (onPause), Stopped (onStop), Destroyed (onDestroy).

Em que ordem os métodos do ViewController Lifecycle são chamados no iOS?

Ordem: loadView → viewDidLoad → viewWillAppear → viewDidAppear → viewWillDisappear → viewDidDisappear. viewDidLoad é chamado uma vez.

O que é LifecycleOwner no Android?

LifecycleOwner é um componente do Android Architecture Components que possui o ciclo de vida de uma Activity ou Fragment. Permite inscrever-se em eventos via LifecycleObserver.

Quais estados o App Lifecycle tem no iOS?

O aplicativo iOS passa por cinco estados: Not Running, Inactive, Active, Background, Suspended. As transições são gerenciadas via UIApplicationDelegate.

O que é Saved State no Android?

Saved State é o mecanismo do Android para preservar o estado da Activity/Fragment ao rotacionar a tela ou recriar o processo. Usa onSaveInstanceState e SavedStateHandle.

Resumo

  • Activity Lifecycle no Android (onCreate → onDestroy) — a base do gerenciamento de estado da tela
  • iOS ViewController Lifecycle (viewDidLoad → viewDidDisappear) — a chave para o funcionamento correto do UIKit
  • Fragment Lifecycle é mais complexo que o da Activity devido a onAttach/onDetach e onCreateView/onDestroyView
  • LifecycleOwner (Android) permite inscrição reativa em eventos sem vazamentos de memória
  • App Lifecycle gerencia o estado de todo o aplicativo (Active, Background, Suspended)
  • SwiftUI usa onAppear e onDisappear em vez dos métodos tradicionais de ViewController
  • O tratamento adequado do ciclo de vida previne até 80% das falhas típicas de aplicativos móveis

Vamos desenvolver um aplicativo móvel chave na mão

A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.

Discutir o projeto