본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[Android/안드로이드] Activity LifeCycle (생명주기) 를 확실히 알아 볼 수 있는 실험들 참여 해보시겠어요?

by 돼지왕 왕돼지 2012. 1. 26.
반응형


0. History


- 이 글은 2012-01-26 초안 작성 시작하였습니다.
- 잘못된 정보, 오래된 정보, 오타가 있으면 Comment 로 알려주세요. 확인 후 수정하겠습니다.
- 이 글은 2012-01-27 초안 작성 완료하였습니다.




1. Information.


어떤 실험들을 하실 예정인가요?


 ActivityLife Cycle.. 즉 액티비티 생명주기를 알아보기 위해 다음과 같은 실험을 해보았고, 결과만을 공유해드리겠습니다.
실험 소스 코드는 startActivity() 를 부른것과 manifest 에서 launchMode 를 바꿔준 것 이외에는 특별히 한 것이 없습니다.
아! 물론 각 생명주기, onCreate, onStart, onResume, onPause, onStop, onRestart, onDestory 에 로그는 찍었습죠 :)

1. A, B Activity 가 있을 때 A activity 가 B activity 를 호출하는 경우.

2. A, B Activity 가 있을 때 A activity 가 Dialog 를 상속한 B Activity 를 호출할 경우.

3. A Activity 가 있을 때 A activity 에서 Home 키를 눌렀을 경우.

4. A,B,C Activity 가 있을 때 B Activity의 launchMode 가 singleTask일 때, A -> B -> C -> B 순으로 호출하는 경우.

5. A, B Activity 가 있을 때 B Activity 의 launchMode 가 singleTop 일 때, A -> B -> B 순으로 호출하는 경우.


 재미있겠죠?



1번 실험결과 부터 빨리 알려주세요.


[실험내용]
 A와 B Activity 가 있다.
 A Activity 를 launch 시킨 후, A Activity에서 바로 B Activity 를 호출한다. 

[실험결과]

 A.onCreate() -> A.onStart() -> A.onResume() -> A.onPause()
-> B.onCreate() -> B.onStart() -> B.onResume() -> A.onStop()

[특이사항]
 A.onPause() 는 B Activity 를 실행시키며 바로 호출되지만, A.onStop() 은 B Activity 의 onResume() 이 불린 후에 불린다.



[추가실험]
 B Activity 가 떠 있는 상태에서 Back key 를 눌러본다.
 

[실험 결과]

 B.onPause() -> A.onRestart() -> A.onStart() -> A.onResume() -> B.onStop() -> B.onDestory()

[특이 사항]
 A가 Pause 되어있던 상황이기 때문에 onRestart() 를 먼저 타게 되고, onStart(), onResume() 순으로 탄다.
B.onStop() 은 앞 실험과 마찬가지로 A의 onResume() 이 불린 후에 타고, B는 사라지는 Activity 이므로 B.onDestory() 가 불린다.




2번 실험 결과도 빨리 알려주세요


[실험내용]
 A와 B Activity 가 있다. B Activity 는 Dialog 를 상속한 Activity 이다.
A Activity 를 launch 시키고, A Activity는 바로 B Activity 를 호출한다. 

[실험 결과]

 A.onCreate() -> A.onStart() -> A.onResume() -> A.onPause()
-> B.onCreate() -> B.onStart() -> B.onResume()

[특이 사항]
 A의 onStop() 이 불리지 않는다.



[추가 실험]
 Dialog 를 상속한 B Activity 가 떠 있는 상태에서 Back key 를 눌러본다.
 

[실험 결과]

 B.onPause() -> A.onResume()
-> B.onStop() -> B.onDestory()

[특이 사항]
 A의 onRestart(), onStart() 가 불리지 않고 바로 onResume() 이 호출된다. onStop() 이 안 불렸기 때문이다.




흥미진진한데, 3번도 빨리 갑시다.


[실험 내용]
A Activity 가 있다. 
A Activity 를 실행시킨 후 Home 키를 누른다. 

[실험 결과]
 
Launcher 가 개입된다는 거 외에는 별 다른 차이점이 없다..




4번은?? 4번은요?!


[실험 내용]
A, B, C 세 개의 Activity 가 있다. 
이 중 B 는 launchMode = "singleTask" 로 되어 있다. 
A -> B -> C -> B 순으로 호출한다. 

[실험 결과]

A.onCreate() -> A.onStart() -> A.onResume() -> A.onPause()
-> B.onCreate() -> B.onStart() -> B.onResume() -> A.onStop() -> B.onPause()
-> C.onCreate() -> C.onStart() -> C.onResume() -> B.onStop() -> C.onPause()
-> B.onRestart() -> B.onStart() -> B.onResume() -> C.onStop() -> C.onDestory()

[특이사항]
B가 singleTask 이기 때문에 C를 destory 시킨다. B 위의 모든 Activity 들은 모두 pop 된다. 




마지막 5번도 빨리 알려주세요


[실험 내용]
A, B 두개의 Activity 가 있다. 
이 중 B 는 launchMode = "singleTop" 이다. 
A -> B -> B 순으로 호출한다.

[실험결과]

A.onCreate() -> A.onStart() -> A.onResume() -> A.onPause()
-> B.onCreate() -> B.onStart() -> B.onResume() -> A.onStrop()
-> B.onPause() -> B.onResume()

[특이사항]
singleTop 이기 때문에 B 자신 위에 또 B 자신을 띄우지 않고,
onPause() -> onResume() 을 타는 과정만 거친다. 



손가락 추천 꾸욱~ 더 좋은 글로 보답하겠습니다.


2. Summary


- Activity 의 생명주기를 실험을 통해서 살펴봄으로서, 더 쉽고 정확하게 이해 할 수 있다.

- 실험 내용은 다음과 같으며, 결과만 공유한다. 결과의 핵심파트가 많아서 Summary 하지 않고 본문을 Bold 로 대체하였다.

 1. A, B Activity 가 있을 때 A activity 가 B activity 를 호출하는 경우.    

 2. A, B Activity 가 있을 때 A activity 가 Dialog 를 상속한 B Activity 를 호출할 경우.
 3. A Activity 가 있을 때 A activity 에서 Home 키를 눌렀을 경우.
 4. A,B,C Activity 가 있을 때 B Activity의 launchMode 가 singleTask일 때, A -> B -> C -> B 순으로 호출하는 경우.
 5. A, B Activity 가 있을 때 B Activity 의 launchMode 가 singleTop 일 때, A -> B -> B 순으로 호출하는 경우.





3. References


http://jeh86122.blog.me/130085195419 
   Jung Euihan 님의 네이버 블로그.

http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle 
   Android Developer Doc. Activity의 Activity Lifecycle




4. Tags






반응형

댓글