마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

백그라우드를 감지할 수 있는 이벤트

0 추천
안녕하세요. 웹뷰를 통해 안드로이드 앱을 제작하고 있습니다.

웹서버와 연동을 하여 푸시알림 기능을 구현하는데

주제구독 방식으로 푸시알림을 구현하려고 합니다.

사용자 아이디가 웹서버에서 고유한 값이므로 사용자 아이디로 구독을 하게끔 하려고

하고 있습니다.

 

문제는 onCreate에 구현을 시켜놨기 때문에

앱을 처음 실행하는 경우 회원가입도 안되어있고 로그인도 안되어 있는 상태이므로

이런 경우에 웹서버에 아이디 값이 없으니 가져오지를 못합니다.

회원 가입을 하고 로그인을 한다고 하더라도 앱을 종료시켰다가 다시 실행해야 정상적으로

구독이 되겠죠. 웹서버에 자동로그인은 설정해놨기 때문에 아이디값을 정상적으로 가져올수는 있습니다.

 

onCreate 말고 다른 이벤트가 있을까요???

홈버튼을 누르는것과 같은 백그라운드 상태로 갈때 구독을 하는것도 좋은 방법이라고 생각하는데

백그라운드상태를 감지하는 메서드(이벤트 리스너)가 있을까요??
백수개발자 (220 포인트) 님이 2020년 11월 26일 질문

1개의 답변

0 추천

네, 있습니다. 해당 기능을 사용하시려면 Android Architecture Component를 사용하셔야 합니다.

https://developer.android.com/reference/androidx/lifecycle/ProcessLifecycleOwner

ProcessLifecycleOwner 에 콜백을 달아주면 됩니다. 

여기 블로그에 예제가 있습니다. 

https://medium.com/trendyol-tech/android-architecture-components-processlifecycleowner-26aa905d4bc5

class ForegroundBackgroundListener : LifecycleObserver {

    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    fun createSomething() {
        Log.v("ProcessLog", "Lifecycle.Event.ON_CREATE")
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    fun startSomething() {
        Log.v("ProcessLog", "Lifecycle.Event.ON_START")
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    fun stopSomething() {
        Log.v("ProcessLog", "Lifecycle.Event.ON_STOP")
    }
}

해당 이벤트들은 앱 전역적인 이벤트이기 때문에 한번씩만 발생합니다. 따라서 앱이 백그라운드인지 포그라운드인지 쉽게 찾아낼 수 있습니다.

만약 액티비티 단위로 체크를 하고 싶으시다면 https://developer.android.com/topic/libraries/architecture/lifecycle

를 사용하시면 되구요. 그냥 라이브러리 추가하고 싶지 않으시면 BaseActivty 를 만드신 다음 onStop, onStart를 오버라이드 하시고 필요한 코드를 넣으신 다음, 모든 액티비티에서 상속을 받으면 됩니다.

프레그먼트가 없고 액티비티만 존재한다면 ActivityLifecycleCallback가 제일 적합해 보입니다.

 https://developer.android.com/reference/android/app/Application.ActivityLifecycleCallbacks

사용법들은 다 심플합니다. 안드로이드 문서나 구글에서 찾아보시면 됩니다.

도움이 되시길.

spark (226,420 포인트) 님이 2020년 11월 26일 답변
...