본문 바로가기

안드로이드

액티비티, 프래그먼트 생명주기에 대한 고찰 (03/10 수정: 화면 회전시 추가)

[ 생명주기 Example 깃허브 주소 (새창) ]

 

+ 수정 (21.03.10) 화면 회전시 추가

 

갑자기 스마트폰 화면을 회전했을 때 생명주기가 어떻게 변하는지 궁금해져서 바로 실험해 보았다.

앱 초기 실행시
화면 회전했을 때

내 예상으로는 onPause -> onStop 까지만 실행되고 reStart가 실행될 줄 알았으나

onDestroy까지 실행된 후에 다시 앱이 재실행 되는 것을 알 수 있었다. (그렇군..🤔)

 

===========================================================================

앱 개발을 하다가 문득

'평소에 구글에서 많이 봐왔던 액티비티, 프래그먼트 생명주기의 화면 전환시에 진짜 생명주기는 어떻게 될까?'

 

라는 궁금증이 생겨서 직접 실험 해보기로 했다.

 

우선 하단에는 액티비티 생명주기 사진

Activity Life cycle

이 그림은 구글에서 '액티비티 생명주기' 검색하면 제일 첫번째로 뜨는 그림이다. (다들 익숙할 듯)

 

다음은 메인 액티비티 생명주기를 로그로 찍은 결과이다.

main 액티비티 생명주기 

역시나 그대로 찍힌다.

 

 

다음은 Main액티비티에서 Sub액티비티로 넘어갈 때 생명주기이다.

Main에서 Sub, 다시 Sub에서 Main으로 돌아오고 Main 종료

보시다시피 Main에서 Sub로 넘어갈 때 MainPause -> Stop이 호출되기 전에 SubCreate -> Start -> Resume 가 먼저 호출되고 그 다음 Main의 함수가 호출된다.

 

처음 내 예상과는 살짝 달랐다. (Main의 Puase -> Stop이 호출된 후 Sub 함수들이 호출되는 줄 알았던..)

 

 

 

이쯤되니 프래그먼트도 궁금해졌다. 실험해보자.

Fragment 생명주기

 

 

아래는 Main에서 Fragment1을 띄운 후 Main을 종료시킨 결과이다.

Main -> Frag1 -> 종료

Main과 Fragment의 Pause, Stop 등 같은 함수가 같은 시기에 종료되는 것을 알 수 있다.

 

 

이번에는 Main에서 Fragment1을 켜고 Fragment2를 켜보자.

Main -> Frag1 -> Frag2로 이동한 모습

Main에서 Fragment1을 띄우고 Fragment2를 띄운 모습이다. 

역시나 액티비티 생명주기와 비슷하게 Fragment1의 Pause, Stop... 이 실행되기 전에 Fragment2의 Attach -> onCreate가 실행된다.

 

하지만 여기서 주의할 점은 액티비티에서는 Main의 Resume까지 실행된 후 Sub가 실행되었지만,

프래그먼트에서는 Fragment2의 onCreate까지만 실행되고 Fragment1의 Pause...onDetach 까지 실행 후에 나머지가 실행되는 것을 알 수 있다.

 

그러니까 Fragment1에서 Fragment2로 넘어갈 땐 

파랑이 Fragment1, 빨강이 Fragment2

이런 식이다.