반응형
테마 변경 시 생명주기
안드로이드 테마 변경 시 이미 생성된 액티비티를 onDestory ⇒ onCreate 해주는 재 생성 과정을 겪게 된다. 문제는 이 과정에서 데이터를 초기화하지 않으면 onCreate 중에 크래시 또는 데이터가 이상하게 나오는 현상이 발생한다.
따라서 테마 변경 시 onConfigurationChanged 함수에서 호출하는 방법에 대해 정리할 예정이다.
테마 변경 시 onConfigurationChanged 호출 하기
AndroidManifest.xml에 속성 추가
<activity
...
android:configChanges="uiMode"
>
...
</activity>
위 속성이 추가되면 onConfigurationChanged 함수에서 관리할 수 있다.
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
int currentNightMode = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
switch (currentNightMode) {
case UI_MODE_NIGHT_NO:
Log.d(TAG, "onConfigurationChanged: Night mode is not active, UI MODE=" + UI_MODE_NIGHT_NO);
break;
case UI_MODE_NIGHT_YES:
Log.d(TAG, "onConfigurationChanged: Night mode is active, UI MODE=" + UI_MODE_NIGHT_YES);
break;
case UI_MODE_NIGHT_UNDEFINED:
Log.d(TAG, "onConfigurationChanged: We don't know what mode we're in, UI MODE=" + UI_MODE_NIGHT_UNDEFINED);
break;
}
}
zFlip5 기준(Android13)으로 다크 모드로 테마 변경 시 아래와 같은 로그가 찍힌다.
12-18 17:46:34.877 D 23947 23947 JYPARK : onConfigurationChanged: Night mode is active, UI MODE=32
참조
반응형
'개발 > Android' 카테고리의 다른 글
[Android] Android Studio를 이용해 SHA Key 구하기 (0) | 2024.03.06 |
---|---|
[Android] StatusBar 라이트 모드, 다크 모드 설정하기 (0) | 2024.01.02 |
[Android] 설정에서 언어 변경(onCreate, onDestory 대응) (0) | 2023.12.18 |
[Android] 멀티 윈도우 실행(onCreate, onDestory 대응) (0) | 2023.12.18 |
[Android] 로렘 입숨(Lorem Ipsum) 텍스트 사이트 (한글, 영어) (2) | 2023.12.18 |