안드로이드에서 화면을 회전하며 액티비티가 초기화되는 경우가 있습니다. 이를 Android Configuration(구성변경)이라고 하는데 화면 회전, 키보드 가용성, 사용자가 다중창 모드등의 동작이 감지되면 Activity는 recreate됩니다. recreate를 야기시키는 Configuration의 특징은 레이아웃이 바뀌게되므로 액티비티 리소스를 다시 로드해야된다는것 입니다.
액티비티가 recreated되면 생명주기는 이렇습니다.
화면의 데이터를 보존할수있는 방법은 onSaveInstanceState에서 번들을 사용하는것 말고도 Viewmodel에 데이터를 저장하거나 manifest의 android:configChanges속성을 사용하여 데이터를 보존할수 있습니다.
class MainActivity : AppCompatActivity() {
private var counter = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 이전 상태 복원
if (savedInstanceState != null) {
counter = savedInstanceState.getInt("counter")
updateCounterText()
}
// 버튼 클릭 시 카운터 증가
incrementButton.setOnClickListener {
counter++
updateCounterText()
}
}
override fun onSaveInstanceState(outState: Bundle) {
// 현재 카운터 값 저장
outState.putInt("counter", counter)
super.onSaveInstanceState(outState)
}
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
// 저장된 상태 복원
counter = savedInstanceState.getInt("counter")
updateCounterText()
}
private fun updateCounterText() {
counterTextView.text = counter.toString()
}
}
<activity android:name=".MainActivity"
android:label="@string/app_name"
android:configChanges="orientation|screenSize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
구성 변경 시에 액티비티가 다시 생성되지 않고 시스템이 자동으로 처리되도록 할 수 있습니다
android:configChanges 속성은 다음과 같은 값들을 가질 수 있습니다:
reference
https://developer.android.com/reference/android/content/res/Configuration
https://medium.com/@rlatngus6663/android-configuration-%EA%B5%AC%EC%84%B1-%EB%B3%80%EA%B2%BD-beb25aa6ab30
https://happythingsmaker.wordpress.com/project-2/android-%EA%B5%AC%EA%B8%80%EC%9D%98-%EB%A9%94%EB%89%B4%EC%96%BC%EC%9D%84-%EB%B2%88%EC%97%AD%ED%95%98%EA%B8%B0/4-%EC%95%A1%ED%8B%B0%EB%B9%84%ED%8B%B0-%EB%9D%BC%EC%9D%B4%ED%94%84%EC%82%AC%EC%9D%B4%ED%81%B4-%EB%8B%A4%EB%A3%A8%EA%B8%B0-0/4-%EC%95%A1%ED%8B%B0%EB%B9%84%ED%8B%B0-%EB%9D%BC%EC%9D%B4%ED%94%84%EC%82%AC%EC%9D%B4%ED%81%B4-%EB%8B%A4%EB%A3%A8%EA%B8%B0-4-%EC%95%A1%ED%8B%B0%EB%B9%84%ED%8B%B0-recreate/