앱의 실행상태 체크해보기
푸시를 받았을 때, 앱이 실행중인지 아니면 앱이 꺼져있다가 실행되는지를 체크해야하는 작업이 필요했습니다
방법을 찾던 중 LifeCycle을 이용하는 방법을 선택했습니다
그 전에 Activity의 활동주기에 관해서도 간략히 정리하려고 합니다.
공식문서를 참고해서 정리해보았습니다
Activity의 활동주기
onCreate()
시스템이 처음 생성될 때 실행, 기본 시스템 로직을 생성
onStart()
onCreate 상태가 되면 호출, Activity가 사용자에게 보이기 직전의 상태
onResume()
앱이 사용자와 상호작용, 앱에서 포커스가 떠나기 전까지 이 상태에 머무름
onPause()
activity가 일시 정지의 상태, 작업을 완전히 종료할 땐 onStop() 사용이 좋다
onStop()
Activity의 활동이 중단됐을 호출, CPU를 비교적 많이 소모하는 종료 작업 실행
onRestart()
onStop()이 호출된 후, 다시 활동이 시작됐을 경우 호출
onDestroy()
활동이 소멸되기 전에 호출, 마지막 생명 주기
LifeCycle 사용하기
앱의 실행상태를 알기 위해 lifeCycle을 체크해봅시다
푸시를 클릭했을 때 상태가 onCreate면 꺼져있다가 실행
onResume이면 실행중인 상태에서 푸시를 클릭한 것으로 나누었습니다
Application.kt
private var lifecycle: Lifecycle? = null
var state = ""
fun getCurrentState(): Lifecycle.State? {
return lifecycle!!.currentState
}
lifecycle = ProcessLifecycleOwner.get().lifecycle
lifecycle!!.addObserver(CycleObserver())
class CycleObserver : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun onCreate() {
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun onStop() {
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun onResume() {
}
}
lifecycle을 체크하기 위해 Application.kt에 선언해두었습니다
그리고 푸시를 받고 클릭 시엔 scheme을 이용해서 원하는 url로 이동하게 해뒀습니다
PushClick.kt
application.state = application.getCurrentState().toString()
if (application.state == Constants.CREATED)
application.scrapingPause = true
else
application.scrapingPause = false
application의 state가 CREATED면 꺼져있던 app이 시작된 것으로 판단했고, RESUMED이면
기존에 app이 실행되고 있었던 것으로 판단했습니다
이번 포스팅은 여기서 마무리하겠습니다
혹시 틀린 부분이 있거나, 다른 의견이 있으시면 댓글 부탁드립니다 :)