본문 바로가기

안드로이드 개발/개발팁

Activity 라이프 사이클을 잘 이해할수 있는 있는 질문과 답변

[안드로이드] 엑티비티 질문할께요     
초기 실행시에 엑티비티 a가 보여지고 그리고 b로 이동한다음에
 
back버튼을 눌러서 종료하면 a로 다시 실행되지만
 
b에서 홈버튼을 눌러 종료하면
 
다시 실행시에 b가 실행되네요.
 
실행할때 마다 a가 실행하게 하려면 어떻게 해야 되나요?
 
 
by 조로산지 2011.04.27 11:19
홈버튼은 앱이 꺼진게 아니라서..기존 액티비티로 가는게 맞는데요
 
만약 홈버튼누르고 다시실행할때 무조건 A를 보여지게 하고싶으시면 .. B  onPause()에다가 finishi() 시켜주면..될꺼같긴한데요 ;;ㅎㅎ;;;
 
안드로이드 생명주기 함보시고 해보세요~
by croute 2011.04.27 11:33
기본적으로 액티비티의 생명주기를 공부하셔야 합니다.
강좌/학습에 가면 칸드로이드에서 번역한 Developer's Guide 가 PDF로 있으니 그걸 다운받으셔서,
액티비티 생명주기(Activity Lifecycle)을 한번 보세요.

자 이제 액티비티 라이프사이클을 안다고 생각하고 말씀드리면,

 


A 액티비티 -> B 액티비티
위와 같은 식으로 호출이 될 때, 액티비티 라이프 사이클의 변화는 아래와 같습니다. (괄호안의 A, B는 액티비티표시)

어플리케이션 실행 -> onCreate(A) -> onStart(A) -> onResume(A) 

이렇게 A가 생성되어서 화면에 뿌려져 있는 상태에서 B를 호출한다고 해봅시다.

A에서 B호출 -> onPause(A), onCreate(B) -> onStart(B) -> onResume(B)

이상황이 온 후, A는 더이상 화면에 보이지 않게 되었을 때, onStop(A) 이 됩니다.
그리고 이 상황에서 B가 화면에 뿌려져 있을 때, 홈 버튼을 눌러서 바탕화면으로 나가게 되면
B가 더이상 보이지 않게 되었기 때문에 onStop(B) 가 되는 겁니다.

이때 Task stack 에는 A / B 의 순서로 쌓여있겠죠.

요 상황에서 다시 어플리케이션을 실행 시킵니다. 그럼 B가 다시 불러지기 시작하죠.
이때의 순서는

기존 상태 onStop(B)  -> onCreate(B) 또는 onRestart(B) 가 되는 겁니다.

기본적으로 어플리케이션은 하나만 켜지도록 되어있어요.
이게 싫다면, 만들고 계신 프로젝트의 모든 액티비티에서 onPause가 불러지면 액티비티를 finish 시키도록 하시던가,
홈키가 눌러진 경우, Intent에서 FLAG를 이용해 Task Stack안에서 액티비티의 순서를 바꿔서 A를 맨 위로 올리시던가,,
어플리케이션을 여러개 킬 수 있도록 변경하던가 등의 여러가지 방법이 있습니다.

 

 


 
매니패스트 파일에서 A 액티비티 속성에 android:clearTaskonLaunch="true" 추가해보세요.