하루에 0.01%라도 성장하자

Develop/Android

onTaskRemoved를 사용하는 방법

뚠님 2022. 6. 22. 09:10
반응형

안드로이드 앱을 종료하면 onDestroy 가 발생하는것은 라이프 사이클을 공부한 사람이라면 알고있는 사실이다.

 

Android Lifecycle

 

실질적으로 onDestroy는 앱종료, 액티비티 종료시 실행해야 하는 코드가 있으면 여기에 넣어주는 경우가 많다.

 

이번에 업무를 진행할 때도 앱 종료시 SharePreference에 값 저장을 해야하는 상황이 발생해서 onDestroy에 값을 넣어 줄까 하다가! 

 

onDestroy는 앱종료 외에 액티비티 종료에서도 발생하니까 이것만으로는 완벽한 코드가 되지 않았다.

 

그래서 Application에 Lifecycle을 이용한여 코드를 넣어보았는데... 이벤트가 발생되지 않는다..

 

@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
fun appDestroyed() {
    // ...
}

 

행여 위 코드가 실행된다 하더라도 앱을 백그라운드 상태에서 프로세스 종료로 실행했을 때 onDestroy가 실행되지 않기 때문에 완벽한 코드가 되지 않는다.

 

따라서 TaskService를 별도로 만들어서 서비스를 등록한 후 onTaskRemoved를 override하여 사용하면 된다.

 

 아래는 코드!

 

class TaskService : Service() {

    override fun onBind(intent: Intent?): IBinder? {
        return null
    }

    override fun onTaskRemoved(rootIntent: Intent?) {
        Logger.d("#!# Service TaskRemoved")
        //.. some code
        stopSelf()
        super.onTaskRemoved(rootIntent)
    }

    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        return super.onStartCommand(intent, flags, startId)
    }
}

 

이렇게 서비스를 생성하고 이를 Manifest 에 등록해주어야 한다.

 

<service
            android:name=".service.TaskService"
            android:stopWithTask="false" />

 

 

반응형