onBackPressed() obsoleto: como processar corretamente o botão "Voltar" no Android

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

onBackPressed() obsoleto: como processar corretamente o botão "Voltar" no Android



Se você já escreveu para Android em Kotlin, certamente já se deparou com o método onBackPressed(). Até recentemente, essa era a forma padrão de interceptar o pressionamento do botão "Voltar" do sistema. Mas nas versões mais recentes do Android Studio, você notará que este método está riscado e marcado com a anotação @Deprecated. Surge a pergunta natural: "onBackPressed() is deprecated. What is the alternative?" — exatamente esta pergunta acumulou milhares de visualizações no Stack Overflow.



Neste artigo, vamos explicar por que o Google decidiu abandonar a abordagem antiga e mostrar, com exemplos reais de código em Kotlin, como processar corretamente o pressionamento do botão "Voltar" agora. Você aprenderá sobre OnBackPressedDispatcher, OnBackPressedCallback e como integrar isso com o ciclo de vida da Activity e do Fragment. Vamos lá!



Por que onBackPressed() se tornou obsoleto?



O principal motivo é a evolução arquitetural do Android. O método antigo onBackPressed() era rigidamente vinculado à Activity. Ele não considerava fragments, não suportava padrões modernos (MVVM, Clean Architecture) e frequentemente causava confusão quando vários componentes tentavam processar o mesmo evento. Google seguiu o caminho da delegação: agora o processamento do "Voltar" é passado para um despachante especial — OnBackPressedDispatcher.



Essa mudança faz parte de uma estratégia mais ampla para simplificar a navegação e melhorar o suporte ao Jetpack. Agora você pode adicionar vários callbacks que funcionam de forma consistente e consideram o ciclo de vida. Se você usa o Navigation Component, o processamento do "Voltar" é automaticamente delegado ao grafo de navegação.



O que veio para substituir: OnBackPressedDispatcher



A partir do Activity 1.0.0 (parte do AndroidX), o Google apresentou uma nova API. Os componentes principais são:



  • OnBackPressedDispatcher — despachante central que gerencia todos os callbacks.
  • OnBackPressedCallback — classe que você herda para definir sua própria lógica de processamento.
  • LifecycleOwner — vinculação ao ciclo de vida (Activity ou Fragment).


Em vez de sobrescrever o método da Activity, você registra um callback no despachante. O despachante decide qual callback executar primeiro (pelo princípio LIFO — o último adicionado é processado primeiro).



Implementação básica na Activity



Vamos começar com um exemplo simples. Suponha que você queira mostrar um diálogo de confirmação ao pressionar "Voltar", para que o usuário não feche o aplicativo acidentalmente.



Forma antiga (obsoleta):



// Não fazemos mais assim!@Deprecatedoverride fun onBackPressed() {    showExitDialog()}


Nova forma com OnBackPressedDispatcher:



class MainActivity : AppCompatActivity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)

// Registra o callback onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { // Sua lógica personalizada showExitDialog() } }) }

private fun showExitDialog() { AlertDialog.Builder(this) .setTitle("Sair") .setMessage("Tem certeza de que deseja sair?") .setPositiveButton("Sim") { _, _ -> finish() } .setNegativeButton("Não", null) .show() }}


Observe o parâmetro true no construtor OnBackPressedCallback(true). Isso é

Blogs

Book Recommendations