Develop/Kotlin

[kotlin] 코틀린 Activity와 Fragment의 생명주기(lifecycle)

JunJangE 2021. 2. 5. 18:26

틀린에서 Activity와 Fragment의 생명주기(lifecycle)에 대해 알아보도록 하겠습니다.

여기서 생명주기(lifecycle)란 코드가 실행되고 끝이 나는 과정을 주기로 나타낸 것을 말하고 생명주기를 잘 알아야 코드를 원활하게 구현할 수 있습니다.

먼저 Activity 생명주기의 대해서 알아보도록 하겠습니다.

 

활동 수명 주기에 관한 이해  |  Android 개발자  |  Android Developers

활동은 사용자가 전화 걸기, 사진 찍기, 이메일 보내기 또는 지도 보기와 같은 작업을 하기 위해 상호작용할 수 있는 화면을 제공하는 애플리케이션 구성요소입니다. 각 활동에는 사용자 인터페

developer.android.com

<Activity의 생명주기>

위 Activity의 생명주기를 보게되면 액티비티가 처음 실행될 때 onCreate() 메소드가 호출되는데 애플리케이션이 처음 시작할 때 최초로 실행되는 메소드입니다. 이후에는 onStart(), onResume() 메소드를 거치며 실행상태가 됩니다. 사용자가 해당 액티비티를 다른 액티비티로 전환 시킬 때 onPause()가 호출되고, onStop()이 호출되어 중지 상태로 바뀌게 됩니다. 이후, 액티비티가 소멸되는 경우에는 onDestroy()가 호출되어 액티비티가 메모리에서 사라지게 됩니다.

 

  • onCreate()

onCreate() 메소드는 Activity가 생성될 때 호출되어, Activity내의 모든 요소들을 이 메소드 내에서 초기화시킬 수 있습니다. UI 레이아웃을 코드 상으로 동작하게 하기 위하여 setContentView()를 통해 정의해주는 메소드도 이 메소드입니다.

 

  • onStart()

onStart() 메소드는 액티비티가 화면에 보이기 직전에 호출되는 메소드입니다.

 

  • onResume()

onResume() 메소드는 사용자로부터 어떠한 동작도 받지 않았을 때 호출되며 액티비티가 화면에 보이게 되는 메소드입니다.

 

  • onPause()

onPause() 메소드는 사용자가 해당 액티비티를 다른 액티비티로 전환시킬 때 호출됩니다. 만약 화면을 전환하기 전 저장되지 않은 데이터가 있다면 사용자가 이 액티비티로 돌아오지 않을 수 있으므로 이 메소드가 호출될 때 저장할 수 있습니다. 단, onPause() 메소드에서 시간이 많이 소요되는 코드를 처리하게 되면 다른 Activity가 호출되는 시간이 지연될 수 있으므로 주의해야 합니다.

 

  • onStop()

onStop() 메소드는 액티비티가 더 이상 사용자에게 보이지 않을 때 호출되는 메소드입니다. 

 

  • onDestroy()

onDestroy() 메소드는 액티비티가 종료될 때 호출되는 메소드이다.


다음으로는 Fragment 생명주기에 대해 알아보도록 하겠습니다.

 

프래그먼트  |  Android 개발자  |  Android Developers

A Fragment represents a behavior or a portion of user interface in an Activity. You can combine multiple fragments in a single activity to build a multi-pane UI and reuse a fragment in multiple activities. You can think of a fragment as a modular section

developer.android.com

<Fragment의 생명주기>

Fragment는 항상 Activity내에서 구축되어야 하며 해당 Fragment의 생명주기는 호스트 Activity의생명기에 직접적으로 영향을 받습니다. 예를 들어 Activity가 일시 정지되는 경우, 그 안의 모든 Fragment도 일시 정지되며 Activity가 소멸되면 모든 Fragment도 마찬가지로 소멸됩니다. 

 

  • onAttach()

onAttach() 메소드는 Fragment가 Activity에 연결될 때 호출되는 메소드입니다. 이때까지는 Fragment가 완전히 생성된 게 아닙니다.

 

  • onCreate()

onCreate() 메소드는 Activity가 Fragment를 생성할 때 호출되는 메소드입니다. Activity의 onCreate() 메소드와 마찬가지로 초기화 작업을 여기서 실행합니다. 하지만, Activity와는 다르게 Fragment의 onCreate()에서는 view와 관련된 UI작업을 할 수 없습니다.

 

  • onCreateView()

onCreateView() 메소드는 Fragment가 UI를 그릴 때 호출되는 메소드입니다. Layout을 inflate 해서 반환해주고, view 객체를 얻을 수 있으므로 UI와 관련된 바인딩 작업을 실행하면 됩니다. Fragment의 레이아웃 루트이기 때문에 UI를 제공하지 않는 경우에는 null을 반환하면 됩니다.

 

  • onActivityCreated()

onActivityCreated() 메소드는 Activity에서 onCreate() 실행이 끝난 후 호출되는 메소드입니다. 이때, Activity와 Fragment의 뷰가 모두 생성되어 연결된 상태이고 view의 변경 작업이 가능합니다.

 

  • onStart()

onStart() 메소드는 Activity가 시작됨 상태에 들어가면 호출되는 메소드입니다. 사용자에게 Fragment가 보이게 되고, 이 메소드에서 UI를 관리하는 코드를 초기화합니다. 이 메소드는 매우 빠르게 완료되고, 완료되면 Resumed(재개) 상태로 들어가 onResume() 메소드를 호출합니다.

 

  • onResume()

onResume() 메소드가 호출되면 사용자와 상호작용 합니다. 어떤 이벤트가 발생하여 포커스가 떠날 때까지 이 상태에 머무릅니다. 프로그램이 일시 정지되어 onPause()를 호출하고 다시 재개되면 onResume() 메소드를 다시 호출합니다. 재개 상태로 전환될 때마다 필요한 초기화 작업들을 수행해야 합니다.

 

  • onPause()

onPause() 메소드는 사용자가 Fragment를 떠나면 첫 번째로 호출되는 메소드입니다. 사용자가 돌아오지 않을 수도 있으므로 여기에 UI 관련 처리를 정지하고, 중요한 데이터를 저장합니다.

 

  • onStop()

onStop() 메소드는 Fragment가 완전히 가려지는 경우 onPause()에 이어 호출되는 메소드입니다. 사용자가 다시 Activity를 호출하면 다시 복원될 수 있는 상태입니다.

 

  • onDestroyView()

onDestroyView() 메소드는 Fragment와 관련된 view가 제거될 때 호출되는 메소드입니다. backstack을 사용했다면, 다시 해당 Fragment로 돌아올 때 onCreateVeiw()가 호출됩니다.

 

  • onDestroy()

onDestroy() 메소드는 Activity 또는 Fragment가 소멸되기 전에 호출되는 메소드입니다. 

 

  • onDetach()

onDetach() 메소드는 Fragment가 완전히 소멸되고, Activity와의 연결도 끊어질 때 호출되는 메소드입니다.