안드로이드 애플리케이션 개발 시 다양한 상황에서 기기 설정 변경이 발생할 수 있다. 이러한 상황에 대응하기 위해 안드로이드에서는 onConfigurationChanged 콜백 메서드를 제공한다.
onConfigurationChanged란?
onConfigurationChanged는 기기의 설정이 변경될 때 호출되는 메서드다. 대표적인 설정 변경 예로는 화면 회전, 화면 크기 변경, 키보드 타입 변경, 언어 설정 변경 등이 있다. 이러한 변경 사항이 발생할 때, 시스템은 해당 액티비티의 onConfigurationChanged 메서드를 호출한다.
onConfigurationChanged의 사용법
기본적으로, 설정 변경이 발생하면 안드로이드 시스템은 현재 액티비티를 종료하고 새로운 설정을 반영하여 재시작한다. 하지만, 이 과정에서 사용자의 데이터가 초기화될 수 있다. 이를 방지하기 위해 onConfigurationChanged 메서드를 사용하여 직접 설정 변경을 처리할 수 있다.
1. 매니페스트 설정
onConfigurationChanged 메서드를 사용하려면, 우선 매니페스트 파일에서 해당 액티비티가 어떤 설정 변경을 직접 처리할 것인지 명시해야 한다. 예를 들어, 화면 회전과 언어 변경을 처리하려면 다음과 같이 작성한다
<activity
android:name=".MainActivity"
android:configChanges="orientation|screenSize|locale" />
2. 메서드 오버라이드
매니페스트 파일을 설정한 후, 액티비티 클래스에서 onConfigurationChanged 메서드를 오버라이드한다.
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// 화면 회전 처리
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
// 가로 모드일 때 처리할 내용
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
// 세로 모드일 때 처리할 내용
}
// 언어 변경 처리
if (newConfig.locale != null) {
// 새로운 언어 설정 반영
}
}
newConfig 객체 정보
newConfig = {1.0 450mcc8mnc [ko_KR] ldltr sw384dp w384dp h757dp 450dpi nrml long port finger -keyb/v/h -nav/h winConfig={ mBounds=Rect(0, 0 - 1080, 2340) mAppBounds=Rect(0, 77 - 1080, 2205) mMaxBounds=Rect(0, 0 - 1080, 2340) mDisplayRotation=ROTATION_0 mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=standard mAlwaysOnTop=undefined mRotation=ROTATION_0 mPopOver=off mOverlappingWithCutout=false mStageConfig=undefined mFreeformTaskPinningState=unpinned} s.2 fontWeightAdjustment=0 ff=0 bf=0 bts=0 cst=1.0 nightDim=0 themeSeq=0}
주의사항
onConfigurationChanged를 사용할 때 몇 가지 주의해야 할 점이 있다.
- 적절한 설정 반영: 설정 변경이 발생하면 사용자 인터페이스나 데이터 상태를 적절히 업데이트해야 한다. 그렇지 않으면 사용자가 예상치 못한 결과를 경험할 수 있다.
- 리소스 로드: 특정 리소스가 변경된 설정에 따라 다를 경우, onConfigurationChanged에서 해당 리소스를 다시 로드해야 한다. 예를 들어, 레이아웃 파일이 다를 경우 이를 재설정한다.
- 메모리 관리: 설정 변경 시 불필요한 메모리 사용을 방지하기 위해, 불필요한 객체나 리소스를 해제하는 것이 좋다.
'Android' 카테고리의 다른 글
[Android] RecyclerView 안티 패턴 (0) | 2024.08.27 |
---|---|
[Android] Compose remember 간단 요약 (0) | 2024.07.17 |
[Android] ViewModel에서 LiveData와 StateFlow의 권장 사용 방법 (0) | 2024.06.20 |
[Android] OS 10 이상에서 알림 갯수 제한 문제 해결 (0) | 2024.06.19 |
[Android] DiffUtil과 Payload를 활용한 RecyclerView 성능 최적화 (0) | 2024.06.18 |