개발하고 있는 앱에서 OS가 13버전 이하인 경우는 뒤로가기 backPress가 잘 동작했지만 14버전은 잘 동작하지 않는 버그가 생겼다.
버그의 원인
요약 및 해결책 : 안드로이드 os14버전 부터는 뒤로 탐색 예측 동작지원이라는 기능이 추가되고 해당 값에 대한 매니페스트 값을 설정해줘야 하는데 true로 설정되어 있어서 false로 바꿔줬다.
여기서부터는 자세한 설명이다.
안드로이드의 os가 14로 넘어오면서 부터 "뒤로 탐색 예측 동작 지원" 기능이 추가됐다.
아래 공식문서를 전부 읽을 필요는 없고 그냥 들어가서 "그림1"을 확인하면 무슨 말인지 곧 바로 이해할 수 있다.
이 새로나온 기능에 관해서 매니페스트에 따로 값을 설정하지 않으면 값은 기본적으로 false로 지정된다. 내가 작업하던 프로젝트에서던 이 값이 true로 설정되어 있어서 기존에 activity의 backPress 오버라이드 메소드가 동작하지 않았던 것이다.
요놈을..
<application
...
android:enableOnBackInvokedCallback="true"
... >
...
</application>
요로코롬 바꿔주면 된다.
<application
...
android:enableOnBackInvokedCallback="false"
... >
...
</application>
14버전 부터는 onBackPressed() 메소드가 권장되지 않는다고 한다.
OnBackInvokedCallback 인터페이스랑 OnBackPressedDispatcher 를 사용해야 한다.
이 녀석들로 예의 사이트에 있던 동작을 처리하는 것이다.
gpt에게 코드의 예시를 물어봤다. 이해하기 쉽게 아래와 같은 코드를 보여줬다.
import android.os.Bundle
import androidx.activity.OnBackPressedCallback
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
// 뒤로 가기 동작 처리
}
})
}
}
이 코드는 API를 통해 뒤로 가기 동작을 처리하는 예시고, OnBackPressedDispatcher는 뷰단인 액티비티나 프레그먼트에서 이벤트처리를 해주는 메소드라고 한다.
자신이 개발하는 앱이 "뒤로 탐색 예측 동작 지원"을 제공해줄거냐 마냐에 따라서 코드를 수정해주면 될 것 같다. 일단 나의 경우는 아니기에 매니페스트 값을 false로 설정하고 넘어갔다.