Sobes.tech
Junior

O que pode contar-me sobre o ciclo de vida da Activity no Android?

sobes.tech IA

Resposta da IA

O ciclo de vida de uma Activity é um conjunto de estados e transições entre eles, pelos quais passa cada instância de Activity desde a sua criação até à destruição. É definido por um conjunto de métodos de callback.

Os principais métodos de callback do ciclo de vida:

  • onCreate(): É chamado na primeira criação da Activity. Aqui, ocorre a inicialização da interface de utilizador, ligação de dados e outras ações únicas.
  • onStart(): É chamado quando a Activity se torna visível ao utilizador, mas ainda não recebeu foco.
  • onResume(): É chamado quando a Activity recebe foco e torna-se ativa. Aqui, normalmente, começam animações e outras ações interativas.
  • onPause(): É chamado quando a Activity perde foco, mas ainda é visível (por exemplo, uma caixa de diálogo semi-transparente por cima). Aqui, deve-se parar operações que consomem recursos.
  • onStop(): É chamado quando a Activity deixa de ser visível ao utilizador. Aqui, guardam-se dados não salvos e libertam-se recursos que já não são necessários.
  • onDestroy(): É chamado antes de a Activity ser destruída. Aqui, libertam-se todos os recursos restantes.
  • onRestart(): É chamado após onStop() quando a Activity volta a ser exibida. Segue-se-lhe onStart().

Gráficamente, o ciclo de vida pode ser representado assim:

Created -> Started -> Resumed -> Paused -> Stopped -> Destroyed

Existem também transições:

  • Created -> Started (após onStart())
  • Started -> Resumed (após onResume())
  • Resumed -> Paused (quando perde foco)
  • Paused -> Resumed (quando recupera foco)
  • Paused -> Stopped (quando fica completamente oculta)
  • Stopped -> Destroyed (quando a atividade termina)
  • Stopped -> Restarted -> Started (após onRestart())

É importante gerir corretamente o estado da Activity nestes métodos de callback para evitar fugas de memória e garantir um comportamento correto da aplicação ao alterar a configuração ou alternar entre Activity. Para guardar o estado, usa-se onSaveInstanceState() (antes de onStop()) e a restauração ocorre em onCreate() ou onRestoreInstanceState() (após onStart()).

Exemplo de uso de onSaveInstanceState():

// Guardar estado
override fun onSaveInstanceState(outState: Bundle) {
    outState.putString("my_data", "some_value")
    super.onSaveInstanceState(outState)
}

// Restaurar estado
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // ...
    if (savedInstanceState != null) {
        val myData = savedInstanceState.getString("my_data")
        // Usar myData
    }
}