본문 바로가기

Android

[Android] Fragment 생명주기

좌측에 Fragment의 생명주기가 있습니다.

 

생명 주기는 Android작동 방식의 핵심으로 생명주기를 준수하지 않으면 메모리 누출 또는 애플리케이션의 비정상 종료가 발생할 수 있습니다.

 

콜백 메서드(특정 이벤트가 발생할 때 호출되는 함수)

onCreat(), onStart(), onResume(), onPause(), onStop(), onDestroy()

가 있습니다.

 

프래그먼트에서 최소한으로 구현해야 하는 3가지 생명주기

메서드가 존재합니다.

 

  • onCreate()

프래그먼트를 생성할 때 호출하며 프래그먼트가 일시정지 혹은 중단

후 재개되었을 때 유지하고 있어야 하는 것을 여기서 초기화를 해야 합니다.

 

  • onCreateView()

프래그먼트가 자신의 인터페이스를 처음 그리기 위해 호출하며 View를 반환해야 합니다.

 

  • onPause()

사용자가 프래그먼트를 떠나면 첫 번째로 이 메서드를 호출합니다. 사용자가 돌아오지 않을 수도 있으므로 여기에 현재 사용자 세션을 넘어 지속되어야 하는 변경사항을 저장합니다.

 

 

아래는 그 외에 Activity 생명주기와 같은 메서드입니다.

 

 

 

 

  • onStart()

액티비티가 시작되면 이 메서드를 호출합니다. 사용자에게 프래그먼트가 보이게 되며 이 메서드에서 UI를 관리하는 코드를 초기화합니다. 이 메서드는 빠르게 완료 이후 Resumed상태로 들어가 onResume() 메서드를 호출합니다.

 

  • onResume()

이 상태에 들어오면 실제 사용자와 상호작용을 합니다. 어떤 이벤트가 발생하여 포커스가 떠나기 전 까지는 이 상태에 머무릅니다. 프로그램이 일시 정지되어 onPause()를 호출하고 다시 재개되면 onResume() 메서드를 다시 호출합니다.

재개 상태로 전환될 때마다 필요한 초기화 작업들을 수행해야 합니다.

 

  • onStop()

다른 액티비티가 화면을 가리게 되면 호출합니다. 여기에서 화면에 보이지 않을 때 실행할 필요가 없는 기능을 모두 정지할 수 있습니다. 앱이 사용자에게 보이지 않는 동안 앱은 필요 없는 리소스를 해제하거나 조정합니다. onPause() 대신 onStop()를 사용하면 사용자가 멀티 윈도 모드에서 Activity를 보지 않더라도 UI 관련 작업이 진행이 유지됩니다. 또한 onStop()을 사용하여 CPU를 많이 소모하는 종료 작업을 실행해야 합니다.

 

액티비티가 중단되면 액티비티 객체는 메모리 안에 머무르지만 연결되어있지는 않습니다. 다시 시작되면 객체를 다시 호출합니다. 최상위 상태가 재개되어도 콜백 메서드 중에 생성된 요소는 다시 초기화할 필요가 없습니다. 

 

액티비티 또는 프래그먼트가 정지되면 시스템이 onSaveInstanceState()를 호출하여 간단하고 가벼운 UI상태를 저장하고 재정의하여 사용할 수 있습니다.

 

* Activity 생명주기에서 현재 상태에서 다시 시작하면 onRestart()를 호출하고 종료하면 onDestroy()를 호출합니다.

 

액티비티와 프래그먼트의 수명 주기에서 가장 중요한 차이점은 백 스탭에 저장되는 방법입니다.

액티비티는 정지되면 시스템에서 관리하는 액티비티의 백 스택에 들어가지만 프래그먼트는 이를 제거하는 트랜잭션에서 addToBackStack()을 호출하여 인스턴스를 저장하라고 명시적으로 요청할 경우에만 액티비티에서 관리하는 백 스택으로 들어갑니다.

 

  • onDestroy()

Activity 또는 프래그먼트가 소멸되기 전에 호출됩니다. 사용자가 Activity를 완전히 닫거나 구성 변경으로 인해 시스템이 일시적으로 소멸시키는 경우에도 호출됩니다. 여기에서는 이번 콜백 메서드에서 해제되지 않은 리소스를 해제해야 합니다.

'Android' 카테고리의 다른 글

[Android] Palette (Helper)  (0) 2021.01.27
[Android] Focus  (0) 2021.01.27
[Android] Palette (Containers)  (0) 2021.01.26
[Android] Palette (Widgets)  (0) 2021.01.26