React Native Android 16 하드웨어 뒤로가기 버튼 앱 종료 이슈 (문제 해결)

Devinix·2026년 2월 19일

[문제 해결]

목록 보기
37/44

문제 상황

React Native 기반 앱을 Android 16(API 36) 에뮬레이터에서 테스트하던 중, 하드웨어 뒤로가기 버튼을 누르면 이전 화면으로 돌아가지 않고 앱이 백그라운드로 전환되는 문제가 발생했다.

React-Native 공식 깃허브 repo에도 비슷한 이슈가 존재한다.
https://github.com/facebook/react-native/issues/54887

원인

Android 13부터 도입된 Predictive Back Gesture(예측형 뒤로가기 제스처)가 원인이었다.

Android 16 에서는 이 기능이 기본 활성화되면서, 시스템이 뒤로가기 이벤트를 앱에 전달하기 전에 먼저 가로채 자체적으로 처리한다. 이로 인해 React Native의 OnBackPressedCallback 기반 BackHandler API까지 이벤트가 도달하지 못하고, 시스템이 바로 Activity를 백그라운드로 보내버리는 현상이 발생했다.

해결 과정

[시도 1: detachInactiveScreens: false 설정]
react-native-screens의 비활성 화면 분리 옵션을 비활성화해보았으나, 효과 없음.

[시도 2: super.onCreate(null) 변경]
react-native-screens 공식 문서에서 권장하는 대로 MainActivity의 super.onCreate(savedInstanceState)를 super.onCreate(null)로 변경. 빌드 성공했으나 효과 없음.

[시도 3: JS 레벨 글로벌 BackHandler 추가]
AppNavigator에서 BackHandler.addEventListener로 직접 navigationRef.goBack()을 호출하도록 구현. 그러나 리스너 자체가 호출되지 않음.

[시도 4: enableOnBackInvokedCallback="false" 설정 (해결)]
AndroidManifest.xml의 태그에 다음 속성을 추가:

  <application
      ...
      android:enableOnBackInvokedCallback="false">

이 설정은 Android 16의 Predictive Back Gesture를 비활성화하여, 뒤로가기 이벤트가 기존 방식대로 OnBackPressedDispatcher를 통해 React Native까지 전달되도록 한다.

결과: 하드웨어 뒤로가기 버튼이 정상적으로 이전 화면으로 돌아가는 것을 확인.

결론

결국 해결 방법은 AndroidManifest.xml에 android:enableOnBackInvokedCallback="false" 한 줄 추가하는 것이 전부였다.

돌이켜보면 허무할 정도로 간단한 수정이지만, 여기에 도달하기까지 detachInactiveScreens 설정 변경, super.onCreate(null) 변경, JS 레벨 글로벌 BackHandler 추가 등 4번의 시도를 거쳤다. 특히 BackHandler 리스너가 아예 호출조차 되지 않는다는 걸 확인했을 때, React Native나 react-native-screens 쪽 문제가 아니라 그 아래 Android 플랫폼 레벨에서 이벤트가 차단되고 있다는 걸 깨닫게 됐다.

profile
React, Next.Js, React-Native

0개의 댓글