[React Native] 안드로이드 네이티브에서 백그라운드/포그라운드 상태 감지하기

김방토·2024년 4월 23일
0

React Native

목록 보기
3/7

목표

이전 글에서 RN 내부에서 백그라운드 상태 감지하는 방법에 대해 알아보았고, 이번엔 RN 프로젝트의 안드로이드 네이티브 내에서 백그라운드 상태를 감지하는 방법에 대해 포스팅한다.

(역시 실습 환경은 React Native CLI)

Lifecycle

Lifecycle에 관한 공식문서

일단 크로스 플랫폼을 믿고 시작한 프로젝트라 아직 공부를 더 해야하겠지만, 안드로이드에서는 수명주기(어디서는 생명주기, 어디서는 수명주기라고 해서 공식문서 찾기가 쉽지 않았다)에 관한 패키지를 지원한다.

앱 수준 gradle의 dependencies에 다음과 같이 추가해주면 된다.
(버전은 시점에 따라 상이할 수 있습니다)

implementation 'androidx.lifecycle:lifecycle-process:2.7.0'

패키지 문서를 보면 굉장히 많은 인터페이스와 클래스가 있는 걸 확인할 수 있는데, 비슷해보이는 이 세개의 차이점에 대해 챗GPT를 이용해 설명을 들었다.

LifecycleOwner:
LifecycleOwner 인터페이스는 수명 주기를 소유하는 객체를 나타냅니다. 주로 활동(Activity), 프래그먼트(Fragment), 서비스(Service) 등이 해당됩니다.
이 인터페이스는 getLifecycle() 메서드를 통해 해당 객체의 수명주기를 가져올 수 있습니다.
LifecycleObserver:
LifecycleObserver 인터페이스를 구현하는 클래스는 특정 LifecycleOwner의 수명주기 이벤트를 관찰합니다.
onCreate(), onStart(), onResume() 등과 같이 수명주기 이벤트에 대한 콜백 메서드를 정의하여 해당 이벤트가 발생할 때마다 작업을 수행할 수 있습니다.
Lifecycle 객체에 등록되어 특정 수명주기 이벤트가 발생할 때마다 알림을 받습니다.
LifecycleEventObserver:
LifecycleEventObserver 인터페이스를 구현하는 클래스는 특정 수명주기 이벤트에 대한 콜백을 간단하게 받습니다.
onStateChanged() 메서드를 사용하여 수명주기 상태 변경 이벤트를 처리합니다.
Lifecycle 객체에 등록되어 특정 수명주기 이벤트가 발생할 때마다 알림을 받습니다.

상태변경 감지가 1순위 목적이기 때문에, LifecycleEventObserver를 이용해 onStateChanged 메서드로 로그를 찍어보려고 한다.

LifecycleEventObserver

MainApplication이 있는 위치에 LifecycleObserver.java를 생성해준다.

public class LifeCycleObserver extends Application implements LifecycleEventObserver {

    @Override
    public void onCreate() {
        super.onCreate();
        ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
    }

    @Override
    public void onStateChanged(@NonNull LifecycleOwner lifecycleOwner, @NonNull Lifecycle.Event event) {
        Log.d("LifeCycleObserver","event: " + event);
    }
}

ProcessLifecycleOwner.get().getLifecycle().addObserver(this);를 통해 create시에 옵저버를 생성해주고, 이 옵저버가 상태를 관찰하며 상태가 바뀔때마다 onStateChanged를 실행하게 되는 것이다.
두번째 매개변수로 받은 event로 상태를 확인할 수 있다.


event에는 요런 상태들이 있다.
event에 관해서는 여기를 참고하시라.

ON_PAUSE: 활동이 일시 중지되었지만 화면에 여전히 보이고 있는 상태
ON_STOP: 활동이 완전히 사용자에게 표시되지 않는 상태
ON_START: 활동이 사용자에게 보이기 시작하는 지점
ON_RESUME: 사용자와 상호 작용 가능한 상태로 들어간 지점

결과


⬆️ 앱을 내렸을 때


⬆️ 앱을 다시 화면에 띄웠을 때

각 이벤트에 따른 분기처리를 해서 로직을 넣으면 앱 상태에 따라 유연하게 동작하는 어플이 될 것이다.

profile
🍅 준비된 안드로이드 개발자 📱

0개의 댓글