태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

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

2009.12.09 00:42

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

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

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



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


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

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

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

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

저작자 표시 비영리 변경 금지
신고

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

  1. Blog Icon
    노란보라

    id가 지정된 view는 state가 저장된다고 어디서 본 것 같은데...
    예제에서 +로 추가한 VIew에 id를 지정해도 방향전환되면 복구가 안되려나요?

  2. id가 지정이 되어있어도 저건 처음부터 xml 코드에 포함된 것들이 아니라 코드를 통해 추가된 것이라 좀 다르죠.

  3. Blog Icon
    loup_

    마지막 부분에 오타가 있습니다. (액티비티의 생애주기)

  4. Blog Icon
    loup_

    아, 오타가 아니였네여.. 죄송함당