Android/Samples & Tips
[Android Tip] 엑티비티 관련
croute
2011. 4. 27. 11:42
초기 실행시에 엑티비티 a가 보여지고 그리고 b로 이동한다음에
back버튼을 눌러서 종료하면 a로 다시 실행되지만
b에서 홈버튼을 눌러 종료하면
다시 실행시에 b가 실행되네요.
실행할때 마다 a가 실행하게 하려면 어떻게 해야 되나요?
기본적으로 액티비티의 생명주기를 공부하셔야 합니다.
public class Activity extends ApplicationContext
{ protected void onCreate(Bundle savedInstanceState); protected void onStar(); protected void onRestart(); protected void onResume(); protected void onPause(); protected void onStop(); protected void onDestroy(); }
기본적으로 액티비티의 생명주기를 공부하셔야 합니다.
안드로이드 사이드의 강좌/학습에 가면 칸드로이드에서 번역한 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를 맨 위로 올리시던가,,
어플리케이션을 여러개 킬 수 있도록 변경하던가 등의 여러가지 방법이 있습니다.