티스토리 뷰

Android

[Android] onBackPressed() deprecated

조예_ 2023. 9. 18. 03:07

Android API 33에서부터 onBackPressed() 메서드가 deprecated 되었다.

Android 12부터 사용자 터치에 응답하는 반응형 모션이 도입되었기 때문인데...!!!!

이로인해 Google은 OnBackInvokedCallback(API 33부터 가능 / 이전버전 기기에서 실행하면 예외 발생) 

또는 OnBackPressedCallback 을 사용하기를 권고하고 있다!!!!


기존

override fun onBackPressed() {
    super.onBackPressed()
}

 

 

OnBackPressedCallback

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root)

        this.onBackPressedDispatcher.addCallback(this, callback)
    }

 

다이얼로그 클릭 시 종료되는 메서드

  private val callback = object : OnBackPressedCallback(true) {
        override fun handleOnBackPressed() {
            // 뒤로 버튼 이벤트 처리
            var builder = AlertDialog.Builder(this@MainActivity)
            builder.setTitle("종료")
            builder.setMessage("정말 종료하실꺼예요!??!?!?!?")
            builder.setIcon(R.drawable.ic_chat)

            val listener = DialogInterface.OnClickListener { dialog, which ->
                when (which) {

                    DialogInterface.BUTTON_POSITIVE ->
                        finish()
                }
            }
            builder.setPositiveButton("종료", listener)
            builder.setNegativeButton("취소", listener)

            builder.show()

        }
    }

 

 

OnBackInvokedCallback

만약 AndroidX를 사용 중이고 OnBackPressedCallback을 사용할 것이라면 의존성을 추가
그게 아니라면 의존성을 추가하지 않고 OnBackInvokedCallback을 사용한다.

dependencies {

implementation "androidx.activity:activity:1.6.0-alpha05"

}

또는

<application
    ...
    android:enableOnBackInvokedCallback="true">

 

해당 속성을 추가해주어야 시스템의 Back Event를 가로채어 앱에서 작동할 수 있고!
OnBackInvokedCallback을 등록했더라도 위 속성값이 false일 때 기존 onBackPressed() 메서드가 호출된다!
Android 13에서는 기본값이 false이지만, Android 14부터 기본값이 true!!

 

onBackPressedDispatcher.addCallback(this, object: OnBackPressedCallback(true) {
    override fun handleOnBackPressed() {
	
    }
})


최소 티라미수 버전 이상인 경우에만 콜백을 등록해야 하며 아니라면 예외가 발생하여 앱 종료...!!
 


 

Back 버튼 두번 클릭 시 앱 종료 시키기!

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
    }

    private var backPressedTime = 0L
    
    private val onBackPressedCallback = object : OnBackPressedCallback(true) {
        override fun handleOnBackPressed() {
            if (System.currentTimeMillis() - backPressedTime <= 2000) {
                finish()
            } else {
                backPressedTime = System.currentTimeMillis()
                Toast.makeText(this@MainActivity, "한 번 더 누르면 종료합니다.", Toast.LENGTH_SHORT).show()
            }
        }
    }
}

 

 

참고 : https://developer.android.com/guide/navigation/predictive-back-gesture?hl=ko 

 

뒤로 탐색 예측 동작 지원 추가  |  Android 개발자  |  Android Developers

뒤로 탐색 예측 동작 지원 추가 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 그림 1: 휴대전화에 표시되는 뒤로 탐색 예측 동작의 디자인 샘플 Android 13(API

developer.android.com

https://developer.android.com/reference/androidx/activity/OnBackPressedDispatcher

 

OnBackPressedDispatcher  |  Android Developers

androidx.appsearch.builtintypes.properties

developer.android.com

https://itstory1592.tistory.com/128

 

[Android] API 33 onBackPressed() deprecated

Android API 33에서 개선된 predictive back gesture이다. 이름 그대로 예측 가능한 뒤로가기 동작이라는 의미이다. 이전 버전에서 back gesture를 지원할 때에는 단순히 화살표만 보여주었다. 그렇기 때문에

itstory1592.tistory.com

https://stickode.tistory.com/625

 

[Kotlin] onBackPressed() deprecated , 대체할 메서드는?

안녕하세요. 오늘은 deprecated 된 onBackPressed()를 어떤 메서드로 대체할 수 있는지에 대해 알아보겠습니다. onBackPressed () 란? 액티비티에서 사용자가 뒤로 가기 키를 눌렀을때 이를 감지하여 호출되

stickode.tistory.com

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함