Skip to main content

BackHandler

Backhandler API는 안드로이드 기기에서 뒤로 가기 버튼을 감지하고, 시스템의 뒤로 가기 동작에 대한 이벤트 리스너를 등록하며, 앱이 어떻게 반응할지 제어할 수 있는 기능을 제공한다.

이벤트 구독은 역순으로 호출된다. 즉, 가장 마지막에 등록한 구독이 가장 먼저 호출된다.

  • 하나의 구독이 true를 반환하면, 이전에 등록한 구독은 호출되지 않는다.
  • 어떤 구독도 true를 반환하지 않거나 구독이 등록되지 않았다면, 기본 뒤로 가기 버튼 기능을 실행해 앱을 종료한다.

모달 사용자 주의: 앱에서 Modal이 열려 있는 상태라면, BackHandler는 어떤 이벤트도 발생시키지 않는다. (Modal 문서 참조)

패턴​

tsx
BackHandler.addEventListener('hardwareBackPress', function () {
/**
* this.onMainScreen과 this.goBack은 예제일 뿐,
* 여기서는 여러분의 구현 방식을 사용해야 한다.
*
* 일반적으로 네비게이터를 사용해 이전 상태로 돌아간다.
*/

if (!this.onMainScreen()) {
this.goBack();
/**
* true를 반환하면 이벤트가 더 이상 전파되지 않고,
* 다른 뒤로 가기 동작이 실행되지 않는다.
*/
return true;
}
/**
* false를 반환하면 이벤트가 계속 전파되고,
* 다른 이벤트 리스너나 시스템의 기본 뒤로 가기 동작이 실행된다.
*/
return false;
});

예제​

다음 예제는 사용자가 앱을 종료하려는지 확인하는 시나리오를 구현한 것이다:

BackHandler.addEventListener는 이벤트 리스너를 생성하고, NativeEventSubscription.remove 메서드를 사용해 제거해야 하는 NativeEventSubscription 객체를 반환한다.

React Navigation과 함께 사용하기​

React Navigation을 사용해 여러 화면 간에 이동한다면, 커스텀 안드로이드 뒤로 가기 버튼 동작 가이드를 참고한다.

BackHandler 훅​

React Native Hooks는 이벤트 리스너를 설정하는 과정을 단순화해주는 유용한 useBackHandler 훅을 제공한다.

레퍼런스

메서드​

addEventListener()​

tsx
static addEventListener(
eventName: BackPressEventName,
handler: () => boolean | null | undefined,
): NativeEventSubscription;

exitApp()​

tsx
static exitApp();

removeEventListener()​

tsx
static removeEventListener(
eventName: BackPressEventName,
handler: () => boolean | null | undefined,
);