음 제목은 이렇게 지었지만, 4대 컴포넌트중 생명주기를 가지고 있는 컴포넌트는 크게 두가지밖에 없습니다.
오늘은, 그 Activity, Service, 그리고 Fragment 생명주기에 대해 다루어 보도록 하겠습니다.
아래 엑티비티 생명주기 다이어그램을 참고하면서 이야기를 해보도록 합시다.
이미지 출처
일단, 다이어그램을 보면 알수있듯, Activity의 상태에 따라 함수들이 호출됩니다.
아래는 Activity의 상태에 따라 호출되는 함수들에 대해 정리했습니다.
onCreate()
다음으로 호출되는 함수입니다.onStop()
-> onRestart()
다음으로 호출되는 함수이기도 합니다.onStart()
다음으로 호출되는 함수입니다.onPause()
다음으로 호출되는 함수이기도 합니다.onResume()
가 호출된 이후에(Activity가 활성화 된 이후에) 다른 Activity가 최상단에서 보여지는(포커스를 잃은) 경우 호출되는 함수입니다.onPause()
가 호출된 이후에(다른 Activity가 최상단에서 보여진 이후에) 다시 기존 Activity로 돌아오는 경우 onResume()
가 호출됩니다.onResume()
가 호출된 이후에(Activity가 활성화 된 이후에) 다른 Activity가 최상단에서 보여지는(포커스를 잃은) 경우 + Activity가 완전히 보이지 않는경우 호출되는 함수입니다.onStop()
이 호출된 이후에(다른 Activity가 최상단에서 보여진 이후에) 다시 기존 Activity로 돌아오는 경우 onStart()
가 호출됩니다.onBackPressed()
호출), 시스템에 의해(ex: 자원부족) Activity가 완전히 종료되면 onDestroy()
가 호출됩니다.onBackPressed()
호출 , finish()
등의 경우가 있습니다.onResume()
까지 호출된 후 onDestroy
가 호출됨.)onStop()
이 호출된 이후에(다른 Activity가 최상단에서 보여진 이후에) 다시 기존 Activity로 돌아오는 경우 호출되는 함수onRestart()
가 호출된 이후 이어서 onStart()
가 호출됨앞서 4대 컴포넌트 포스팅에서 말씀드렸다시피, Fragment는
Activity의 특징 일부를 물려받은 독자적인 생명주기를 가지는 UI컴포넌트입니다.
그래서, Fragment의 생명주기는 Activity가 활성화 된 상태(실행중인 상태)에서 작동합니다.
그럼 Fragment의 생명주기 설명도 다이어그램으로 시작하겠습니다.
onAttach()
다음으로 호출되는 함수입니다.onCreate()
와 역할이 비슷합니다.onCreate()
다음으로 호출되는 함수입니다.onCreate()
다음으로 호출되는 함수입니다.onActivityCreated()
다음으로 호출되는 함수입니다. onStart()
다음으로 호출되는 함수입니다.onCreateView()
가 호출됩니다.Fragment Commit
Activity: onCreate()
Activity: Fragment1 commit()
Fragment1: onAttach()
Fragment1: onCreate()
Fragment1: onCreateView()
Fragment1: onActivityCreated()
Fragment1: onStart()
Activity: onStart()
Activity: onResume()
Fragment1: onResume()
New Fragment Commit
Activity: Fragment2 commit()
Fragment2: onAttach()
Fragment2: onCreate()
Fragment1: onPause()
Fragment1: onStop()
Fragment1: onDestroyView()
Fragment1: onDestroy()
Fragment1: onDetach()
Fragment2: onCreateView()
Fragment2: onActivityCreated()
Fragment2: onStart()
Fragment2: onResume()
onBackPressed called
Fragment2: onPause()
Activity: onPause()
Fragment2: onStop()
Activity: onStop()
Fragment2: onDestroyView()
Fragment2: onDestroy()
Fragment2: onDetach()
Activity: onDestroy()
직접 로그를 찍어본 결과입니다. 위 로그를 보고 꼭 결론을 도출해 보시기 바랍니다.
서비스는 아래의 두가지 case의 생명주기를 가집니다.
1. startService()를 통해 호출된 서비스
2. bindService()를 통해 호출된 서비스
그럼, Service의 생명주기 다이어그램으로 시작합니다.
다이어그램을 보시다시피 Framgnet나 Activity의 생명주기와 비교했을 때 굉장히 단순한 모습입니다.
startService()
를 통해 호출된 서비스서비스 스스로가 서비스를 종료하거나, 클라이언트가 stopService()
를 호출하는 경우, 서비스는 소멸됩니다.
bindService()
를 통해 호출된 서비스서비스에 연결된 클라이언트가 모두 unbindService()
된 상태면, 서비스는 소멸됩니다.
이렇게 4대 컴포넌트 중, 생명주기를 가지고 있는 컴포넌트인 Activity, Service와 Fragment의 생명주기에 대해서 다루어 보았습니다.
혹시, 내용에서 잘못된 내용이나 부족한 내용에 대해서는 댓글로 남겨주시면 보완해 나가도록 하겠습니다.
다음에는 안드로이드 ACC(Android Architecture Components)에 대해 알아보겠습니다.
[1] Listener interface를 implement 한 경우 : 일반적으로 Fragment에서 Activity에 있는 메소드 호출 시 사용하는 방법.