앱의 특성상 화면 방향 회전, 다크/라이트 모드 변경 등에 따라 앱 내의 인스턴스의 상태가 변할 수 있으며,
초기화 되었다가 다시 생성될 수 있다.
이번 포스팅에서는 이와 같은 케이스에서 발생할 수 있는 이슈를 방지할 수 있는
ConfigurationChanged에 대해 설명하겠다.
https://developer.android.com/guide/topics/resources/runtime-changes
구성 변경 처리 | Android 개발자 | Android Developers
구성 변경 처리 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 일부 기기 설정은 런타임에 변경될 수 있습니다(예: 화면 방향, 키보드 가용성 그리고 사용자
developer.android.com
일반적인 경우 화면 방향을 변경할 시,
기존 방향에서 onDestroy()가 호출된 다음 방향 변경이 일어난 뒤에 onCreate()를 다시 탐으로써
액티비티가 재시작된다.
이 때 ConfigurationChanged를 사용하게 되면
onDestroy()와 onCreate()가 호출되는 대신 ConfigurationChanged 함수가 호출되며,
화면 구성 변경 시 필요한 동작이 있다면 함수 안에 작성하면 된다.
<구현 방법>
1. Manifest 파일에 android:configChanges 값을 설정한다.
/**AndroidManifests.xml*/
<activity android:name=".MyActivity"
android:configChanges="orientation|screenSize|screenLayout|keyboardHidden"
android:label="@string/app_name">
*옵션 값
orientation | 화면 방향 변경 |
screenSize | 화면 방향 변경 > Android 3.2(API 수준 13) 이상에서만 적용 |
screenLayout | 폴더블 휴대전화 및 컨버터블 Chromebook과 같은 기기에서 트리거할 수 있는 변경사항 감지 |
keyboardHidden | 키보드 가용성 변경 |
[Android/안드로이드] Manifest Activity 의 속성 ConfigChanges 에 대해 알아보아요.
1. Information먼저 Developer 의 내용을 간단히 정리해주세요.네, Developer가 Reference Doc 이니, 닥디 ( 닥치고 디벨로퍼 ) 부터 시작하겠습니다. - Activity 가 스스로 handling 할 환경 변화 ( Config Changes ) 를
aroundck.tistory.com
2. 해당 액티비티에 onConfigurationChanged() 메소드를 작성한다.
/**MyActivity.java*/
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
// Checks the orientation of the screen
if (newConfig.orientation === Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show()
} else if (newConfig.orientation === Configuration.ORIENTATION_PORTRAIT) {
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show()
}
}
메소드를 작성하면 방향 변경이나 키보드 가용성 변경 시,
onDestroy()와 onCreate() 호출 대신 위 메소드가 호출되게 된다.
변경된 방향에 대해 처리하고 싶은 동작이 있는 경우,
작성된 소스처럼 매개변수로 들어온 newConfig의 orientation 속성을 이용하여 처리하면 된다.
또한 이런 기능은 앱이 foreground에 존재해야 유효하다.
앱이 백그라운드에 배치되면 시스템에서 앱을 소멸할 수 있다.