
안드로이드 개발을 하다 보면, 뒤로가기 버튼을 눌렀을 때 특정 동작을 처리해야 하는 경우가 자주 발생합니다.
기존에는 onBackPressed 메서드를 오버라이드하여 이를 구현했지만, 안드로이드 12(API 31)부터 이 메서드가 Deprecated되었습니다. 대신 OnBackPressedDispatcher를 이용한 새로운 방식이 도입되었습니다.
이번 글에서는 안드로이드에서 뒤로가기 기능을 구현하는 새로운 방법과 그 이유를 정리 해 두겠습니다.
왜 onBackPressed가 Deprecated되었을까?
onBackPressed는 뒤로가기 버튼의 동작만을 단순히 처리하도록 설계된 메서드였습니다. 하지만 Fragment와 Lifecycle 기반 컴포넌트가 점차 중요해지면서 뒤로가기 이벤트를 더 유연하게 처리할 필요성이 커졌습니다.
안드로이드에서 OnBackPressedDispatcher를 도입한 이유:
- Fragment와의 통합: Fragment 내부에서도 독립적으로 뒤로가기 동작을 처리할 수 있도록 설계.
- 다중 콜백 지원: 여러 컴포넌트에서 독립적으로 뒤로가기 동작을 정의할 수 있음.
- Lifecycle 기반 동작 제어: Activity와 Fragment의 생명주기에 따라 동작이 자동 관리.
새로운 뒤로가기 처리 방식: OnBackPressedDispatcher
새로운 방식에서는 OnBackPressedCallback 객체를 생성하고 이를 OnBackPressedDispatcher에 등록하여 뒤로가기 버튼의 동작을 제어합니다. 이를 통해 보다 명확하고 관리 가능한 코드를 작성할 수 있습니다.
예제: 모니터링 상태에서 뒤로가기 이벤트 처리
다음은 모니터링 상태일 때 종료 다이얼로그를 표시하고, 그렇지 않을 경우 기본 뒤로가기 동작을 수행하는 코드입니다.
구현 코드
class MonitoringActivity : AppCompatActivity() {
private var isMonitoring: Boolean = false // 모니터링 상태 플래그
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_monitoring)
// 뒤로가기 버튼 처리 설정
handleBackPressed()
}
/**
* 뒤로가기 버튼 동작 설정
*/
private fun handleBackPressed() {
val callback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
if (isMonitoring) {
// 모니터링 중이라면 종료 다이얼로그 표시
finishMonitoringEvent()
} else {
// 기본 뒤로가기 동작 수행
isEnabled = false // 콜백 비활성화
onBackPressedDispatcher.onBackPressed() // 시스템 기본 동작 호출
}
}
}
// OnBackPressedDispatcher에 콜백 등록
onBackPressedDispatcher.addCallback(this, callback)
}
/**
* 모니터링 종료 다이얼로그 표시
*/
private fun finishMonitoringEvent() {
AlertDialog.Builder(this)
.setTitle("End Monitoring")
.setMessage("Are you sure you want to stop monitoring?")
.setCancelable(false)
.setPositiveButton("Yes") { _, _ ->
isMonitoring = false // 모니터링 상태 해제
finish() // Activity 종료
}
.setNegativeButton("No") { dialog, _ ->
dialog.dismiss()
}
.show()
}
}
코드 설명
1. OnBackPressedCallback 생성
- OnBackPressedCallback은 뒤로가기 버튼 동작을 정의하는 콜백 객체입니다.
- handleOnBackPressed 메서드에서 뒤로가기 버튼 클릭 시 수행할 동작을 정의합니다.
- isEnabled를 false로 설정하면 기본 동작이 수행됩니다.
2. 콜백 등록
- onBackPressedDispatcher.addCallback(this, callback)를 호출하여 콜백을 등록합니다.
- this는 LifecycleOwner로, Activity의 생명주기를 따릅니다.
- Activity가 종료되면 콜백도 자동으로 비활성화됩니다.
3. 사용자 정의 동작
- isMonitoring 플래그를 사용해 모니터링 상태를 확인합니다.
- 모니터링 중이라면 종료 다이얼로그를 표시하고, 그렇지 않을 경우 기본 뒤로가기 동작을 수행합니다.
참고: https://developer.android.com/reference/androidx/activity/OnBackPressedDispatcher
OnBackPressedDispatcher | Android Developers
androidx.appsearch.builtintypes.properties
developer.android.com
'Android > Android Core' 카테고리의 다른 글
[Android] Activity 생명주기 정리 (0) | 2025.02.24 |
---|---|
[Android/Kotlin] 비상 사운드 효과 구현: 강제 볼륨 조절 (0) | 2024.12.13 |
[Android/Kotlin] Kakao Map V2: 특정 좌표를 모두 화면에 표시하기 (0) | 2024.12.02 |
[Android/Kotlin] API Key 숨기기: buildConfigField 활용법 (2) | 2024.12.02 |
[Android/Kotlin] 안드로이드 앱에서 카카오 SDK를 사용해 OAuth 로그인을 구현하는 방법 (2) | 2024.11.09 |