안드로이드/개발관련(Kotlin)

안드로이드 뒤로 가기 두 번 눌러서 종료 (onBackPressed, onBackPressedDispater)

닉네임못짓는사람 2023. 3. 29. 21:11
반응형

 

이번 글에선 기기의 뒤로 가기 버튼을 두 번 눌러서 화면을 종료하는 방법에 대해서 알아보도록 하자.

 

OnBackPressed


여기서 활용할 함수는 onBackPressed함수인데, 기기의 뒤로가기 버튼을 누르면 호출된다.

    private var backPressedTime: Long = 0L
    
    override fun onBackPressed() {
        if (System.currentTimeMillis() - backPressedTime <= 2000) {
            finish()
        } else {
            backPressedTime = System.currentTimeMillis()
            Toast.makeText(this, "한 번 더 누르면 종료됩니다.", Toast.LENGTH_SHORT).show()
        }
    }

동작 방식은 onBackPressed 함수가 호출 된 시간을 저장하는 변수를 하나 생성한 후

onBackPressed함수 호출 시 현재 시간과 이전에 함수가 호출 된 시간의 차가 2를 넘지 않으면 화면을 종료하고,

2를 넘으면 backPrssedTime을 업데이트 하고 Toast메시지를 띄워주도록 한다.

 

OnBackPressedDispatcher


안드로이드 33 Tiramisu버전부터는 위에서 이야기한 onBackPressed함수가 deprecated되었기 때문에

OnBackPressedDispatcher로 대체하여 사용하여야 한다.

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()
            }
        }
    }
}

기본 로직은 위와 동일하기 때문에 onBackPressedDispatcher에 callback만 추가해주면 된다.

반응형