태터데스크 관리자

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

태터데스크 메시지

저장하였습니다.

티스토리 툴바



이 게시물을 무단으로 사용하는 행위(비영리, 영리 포함)는 CCL 2.0 저작자 표시-비영리-변경금지 라이센스에 의거하여 금지되어 있습니다. 원본 글의 출처 및 저작자를 표시해 주신다면 글의 스크랩은 자유롭게 하실 수 있습니다. 단, 비영리 목적의 발표(스터디 등)에 위 글을 사용하고 싶으신 분은 제게 미리 메일로 문의 부탁드립니다.

저작권과 관련된 자세한 사항은 이곳을 참조해 주시기 바랍니다.


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

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

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



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


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

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

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

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

저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License


안드로이드 정보, 강좌를 누구보다 빨리 접하고 싶으신가요?

그렇다면 이메일 구독 혹은  구글 리더에 피드 추가 를 통해 업데이트되는 최신 글들을 받아보실 수 있습니다. :)




TRACKBACK http://androidhuman.tistory.com/trackback/293 관련글 쓰기

댓글을 달아 주세요

  1. 노란보라

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

    2009/12/09 10:27 [ ADDR : EDIT/ DEL : REPLY ]
    • id가 지정이 되어있어도 저건 처음부터 xml 코드에 포함된 것들이 아니라 코드를 통해 추가된 것이라 좀 다르죠.

      2009/12/09 12:42 [ ADDR : EDIT/ DEL ]
  2. loup_

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

    2013/01/22 00:46 [ ADDR : EDIT/ DEL : REPLY ]
    • loup_

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

      2013/01/22 17:44 [ ADDR : EDIT/ DEL ]