화면회전시 액티비티의 생명주기는 다음과 같이 변화함

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)
    }
}