Android/Error

[Android] onBackPressed 함수 Deprecated 경고 해결 방법 한 번에 정리하기: onBackPressedDispatcher으로 이전하는 방법

Dev.Cho 2024. 1. 13. 21:55

오류 메세지와 원인 분석

안드로이드 API33부터 onBackPressed 함수가 Deprecated 되면서 함수를 override하면 다음과 같은 경고 메세지가 뜨고 있다.

그림1. 경고 메세지

'onBackPressed(): Unit' is deprecated. Overrides deprecated member in 'androidx.core.app.ComponentActivity

 

직역하면 다음과 같은 뜻이다.

'onBackPressed(): Unit'은 더 이상 사용되지 않습니다. 'androidx.core.app.ComponentActivity'에서 더 이상 사용되지 않는 메서드를 재정의합니다.

 

당분간은 메세지가 뜬 상태로 있겠지만, 향후 몇 버전 뒤에는 코드가 없어질 것이므로, 이 글에서는 onBackPressed를 새로운 메서드로 이전하는 방법에 대해 다룬다.

해결 방법

onBackPressed 경고를 해결하기 위해서는 onBackPressed에 있던 함수들을 onBackPressedDispatcher을 사용하도록 Migration해야 한다. Migration 하는 방법은 간단하다. 

 

해결 방법1

만약 기존 코드가 이런식으로 작성되어 있다면, 일반적으로 [작성했던 코드] 부분은 super.onBackPressed가 불리지 않도록 해 기본 뒤로가기 동작이 설정하기 위한 것이다.

override fun onBackPressed() {
    [작성했던 코드]
    super.onBackPressed() // 기본 뒤로가기 동작
}

 

따라서, 다음과 같이 이전하면 된다.

class MainActivity : ComponentActivity() {
    private val onBackPressedCallback: OnBackPressedCallback = object : OnBackPressedCallback(true) {
        override fun handleOnBackPressed() {
            [작성했던 코드]
            this.isEnabled = false
            onBackPressedDispatcher.onBackPressed()
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
        ...
    }
}

 

해결 방법2

만약 기존 코드에서 super.onBackPressed가 불리지 않고 아래와 같이 작성된다면, 기본 뒤로 가기 동작을 사용하지 않는 것이다.

override fun onBackPressed() {
    [작성했던 코드]
}

 

따라서, 다음과 같이 이전하면 된다.

class MainActivity : ComponentActivity() {
    private val onBackPressedCallback: OnBackPressedCallback = object : OnBackPressedCallback(true) {
        override fun handleOnBackPressed() {
            [작성했던 코드]
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
        ...
    }
}

 

정리

이번 글에서는 onBackPressed 함수를 onBackPressedDispatcher을 사용하도록 이전하는 방법에 대해 알아보았다.

반응형