이 게시물을 무단으로 사용하는 행위(비영리, 영리 포함)는 CCL 2.0 저작자 표시-비영리-변경금지 라이센스에 의거하여 금지되어 있습니다. 원본 글의 출처 및 저작자를 표시해 주신다면 글의 스크랩은 자유롭게 하실 수 있습니다. 단, 비영리 목적의 발표(스터디 등)에 위 글을 사용하고 싶으신 분은 제게 미리 메일로 문의 부탁드립니다.
저작권과 관련된 자세한 사항은 이곳을 참조해 주시기 바랍니다.
저작권과 관련된 자세한 사항은 이곳을 참조해 주시기 바랍니다.
앞서 다뤄봤듯이, 액티비티는 고유의 생애주기를 가지고 있습니다.
그런데... 아래에서 다뤘던 생애주기들은 모두 Orientation(방향)이 변하는 것은 가정하고 있지 않습니다.
방향이 변하는데 액티비티랑 뭔 상관이냐구요? 네. 엄청난 영향을 미칩니다. :)
단말기의 방향만 바뀌어도, 액티비티는 바람에 흔들리는 갈대마냥 엄청난 변화를 맞게 됩니다.
방향이 바뀌면, 액티비티는 소멸되었다가 다시 생성되게 됩니다.
아래의 예를 보시죠. 아래는 '+' 버튼을 누르면 새로 버튼들이 추가되도록 구성되어있습니다.
그런데, 이 상태에서 단말기를 돌려 Landscape 모드로 바뀌게 되면...
위와 같이 아까 추가되었던 View들은 온데간데 없이 사라지게 됩니다. -_-;;
액티비티가 소멸되었다가 다시 생성되면서, 기본 레이아웃 상태로 바뀌게 되는 것이죠. :)
하지만, EditText에 입력한 텍스트들은 그대로 남아있는데, 이는 onSaveInstanceState() / onRestoreInstanceState() 메소드가 호출되면서 현재의 액티비티 상태를 저장하기 때문입니다.
기본으로 저장해주는 것들 외에 Orientation이 변할 때 저장해야 할 것들의 처리는 onSaveInstanceState / onRestoreInstanceState 메소드에서 처리해 주시면 됩니다.
정리하면... 액티비티의 Orientation이 변할 때, 액티비티의 생애주기 메소드 호출 순서는 아래와 같습니다.
onSaveInstanceState() // 액티비티 상태 저장
onPause()
onStop()
onDestroy()
onCreate()
onStart()
onRestoreInstanceState() // 액티비티 상태 복구
onResume()
onPause()
onStop()
onDestroy()
onCreate()
onStart()
onRestoreInstanceState() // 액티비티 상태 복구
onResume()
'어플리케이션 구성 > 액티비티(Activity)' 카테고리의 다른 글
| 방향변화에 대처하는 액티비티의 자세 Part.2 (부제 : 준비된 자만이 살아남는다) (0) | 2009/12/10 |
|---|---|
| 방향 변화에 대처하는 액티비티의 자세 (부제 : 날 좀 내버려둬!) (4) | 2009/12/09 |
| 액티비티 생애주기, 눈으로 확인하자! (18) | 2009/10/11 |
| 액티비티와 태스크(Task) (6) | 2009/09/20 |
| 액티비티의 생애주기(Lifecycle) (10) | 2009/09/18 |
| 이클립스에서 안드로이드 액티비티 추가하기 (12) | 2009/03/01 |
안드로이드 정보, 강좌를 누구보다 빨리 접하고 싶으신가요?
그렇다면 이메일 구독 혹은
를 통해 업데이트되는 최신 글들을 받아보실 수 있습니다. :)
TAG Activity,
Activity Lifecycle,
onRestoreInstanceState,
onSaveInstanceState,
Orientation,
방향,
방향 변화,
액티비티,
액티비티 상태 저장,
액티비티 생애주기





댓글을 달아 주세요
id가 지정된 view는 state가 저장된다고 어디서 본 것 같은데...
2009/12/09 10:27 [ ADDR : EDIT/ DEL : REPLY ]예제에서 +로 추가한 VIew에 id를 지정해도 방향전환되면 복구가 안되려나요?
id가 지정이 되어있어도 저건 처음부터 xml 코드에 포함된 것들이 아니라 코드를 통해 추가된 것이라 좀 다르죠.
2009/12/09 12:42 [ ADDR : EDIT/ DEL ]마지막 부분에 오타가 있습니다. (액티비티의 생애주기)
2013/01/22 00:46 [ ADDR : EDIT/ DEL : REPLY ]아, 오타가 아니였네여.. 죄송함당
2013/01/22 17:44 [ ADDR : EDIT/ DEL ]