화면회전시 액티비티의 생명주기는 다음과 같이 변화함
onPause() → onStop() → onDestroy()
→ onCreate() → onStart() → onResume()
기존의 액티비티가 사라지고 재생성되는 과정을 거치면서
이미 로딩된 데이터가 사라지고 다시생성될수있음
그래서 화면회전시에 데이터를 유지하기위해
viewModel이나 onSaveInstanceState()를 사용함
viewModel은 액티비티나 프래그먼트가 파괴되더라도 viewModelStore에 저장되어 살아남는다
onSaveInstanceState() 예제
class SaveInstanceStateActivity : AppCompatActivity() {
private var counter = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val counterTextView = findViewById<TextView>(R.id.tvCounter)
val increaseButton = findViewById<Button>(R.id.btnIncrease)
// 복원
counter = savedInstanceState?.getInt("counter") ?: 0
counterTextView.text = "카운터: $counter"
increaseButton.setOnClickListener {
counter++
counterTextView.text = "카운터: $counter"
}
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
// 저장
outState.putInt("counter", counter)
}
}