본문 바로가기

어플리케이션 구성/액티비티(Activity)

방향 변화에 대처하는 액티비티의 자세 (부제 : 날 좀 내버려둬!)

앞서 다뤄봤듯이, 액티비티는 고유의 생애주기를 가지고 있습니다.
그런데... 아래에서 다뤘던 생애주기들은 모두 Orientation(방향)이 변하는 것은 가정하고 있지 않습니다.
방향이 변하는데 액티비티랑 뭔 상관이냐구요? 네. 엄청난 영향을 미칩니다. :)

단말기의 방향만 바뀌어도, 액티비티는 바람에 흔들리는 갈대마냥 엄청난 변화를 맞게 됩니다. 
방향이 바뀌면, 액티비티는 소멸되었다가 다시 생성되게 됩니다.

아래의 예를 보시죠. 아래는 '+' 버튼을 누르면 새로 버튼들이 추가되도록 구성되어있습니다.



그런데, 이 상태에서 단말기를 돌려 Landscape 모드로 바뀌게 되면...


위와 같이 아까 추가되었던 View들은 온데간데 없이 사라지게 됩니다. -_-;;
액티비티가 소멸되었다가 다시 생성되면서, 기본 레이아웃 상태로 바뀌게 되는 것이죠. :)
하지만, EditText에 입력한 텍스트들은 그대로 남아있는데, 이는 onSaveInstanceState() / onRestoreInstanceState() 메소드가 호출되면서 현재의 액티비티 상태를 저장하기 때문입니다.

기본으로 저장해주는 것들 외에 Orientation이 변할 때 저장해야 할 것들의 처리는 onSaveInstanceState / onRestoreInstanceState 메소드에서 처리해 주시면 됩니다.

정리하면... 액티비티의 Orientation이 변할 때, 액티비티의 생애주기 메소드 호출 순서는 아래와 같습니다.

onSaveInstanceState() // 액티비티 상태 저장
onPause()
onStop()
onDestroy()
onCreate()
onStart()
onRestoreInstanceState() // 액티비티 상태 복구
onResume()