onBackPressed() obsoleto: cómo manejar correctamente el botón "Atrás" en Android

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

onBackPressed() obsoleto: cómo manejar correctamente el botón "Atrás" en Android



Si alguna vez ha programado para Android en Kotlin, seguramente se ha encontrado con el método onBackPressed(). Hasta hace poco, era la forma estándar de interceptar la pulsación del botón "Atrás" del sistema. Pero en las versiones recientes de Android Studio notará que este método está tachado y marcado con la anotación @Deprecated. Surge una pregunta lógica: "onBackPressed() is deprecated. What is the alternative?" — precisamente esta pregunta ha acumulado miles de visitas en Stack Overflow.



En este artículo analizaremos por qué Google decidió abandonar el enfoque antiguo y mostraremos con ejemplos reales de código en Kotlin cómo manejar correctamente la pulsación del botón "Atrás" ahora. Conocerá OnBackPressedDispatcher, OnBackPressedCallback y cómo integrarlos con el ciclo de vida de Activity y Fragment. ¡Allá vamos!



¿Por qué onBackPressed() quedó obsoleto?



La razón principal es la evolución arquitectónica de Android. El antiguo método onBackPressed() estaba rígidamente vinculado a Activity. No consideraba los fragmentos, no soportaba patrones modernos (MVVM, Clean Architecture) y a menudo generaba confusión cuando varios componentes intentaban manejar el mismo evento. Google optó por la delegación: ahora el manejo de "Atrás" se transfiere a un despachador especial: OnBackPressedDispatcher.



Este cambio es parte de una estrategia más amplia para simplificar la navegación y mejorar el soporte de Jetpack. Ahora puede agregar múltiples callbacks que funcionan de manera coordinada y respetan el ciclo de vida. Si usa Navigation Component, el manejo de "Atrás" se delega automáticamente al grafo de navegación.



Qué lo reemplaza: OnBackPressedDispatcher



A partir de Activity 1.0.0 (incluido en AndroidX), Google presentó una nueva API. Los componentes principales son:



  • OnBackPressedDispatcher — despachador central que gestiona todos los callbacks.
  • OnBackPressedCallback — clase que se hereda para definir su propia lógica de manejo.
  • LifecycleOwner — vinculación al ciclo de vida (Activity o Fragment).


En lugar de sobrescribir el método de Activity, registra un callback en el despachador. El despachador decide qué callback ejecutar primero (por principio LIFO — el último agregado se procesa primero).



Implementación básica en Activity



Comencemos con un ejemplo simple. Supongamos que quiere mostrar un diálogo de confirmación al presionar "Atrás" para que el usuario no cierre la aplicación accidentalmente.



Forma antigua (obsoleta):



// ¡Ya no se hace así!@Deprecatedoverride fun onBackPressed() {    showExitDialog()}


Nueva forma con OnBackPressedDispatcher:



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

// Registramos el callback onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { // Su lógica personalizada showExitDialog() } }) }

private fun showExitDialog() { AlertDialog.Builder(this) .setTitle("Salir") .setMessage("¿Está seguro de que desea salir?") .setPositiveButton("Sí") { _, _ -> finish() } .setNegativeButton("No", null) .show() }}


Observe el parámetro true en el constructor OnBackPressedCallback(true). Esto es

Blogs

Book Recommendations