POST

[안드로이드] 코틀린 프래그먼트 생명 주기

프래그먼트에도 액티비티와 마찬가지로 화면에 보이는것은 생성에 관련된 5개와 소멸에 관련된 5개가 있다.

 

생성 주기 메서드

생성과 관련된 메서드는 5개 이지만 프래그먼트를 포함하고 있는 액티비티가 화면에 계속나타나고 있는 상태에서는 onAttach() 부터 onResume()까지의 메서드가 모두 한번에 호출됨

 

 onAttach()

    프래그먼트 매니저를 통해 액티비티에 프래그먼트가 추가되고 commit되는 순간 호출됨

    액티비티 소스코드에서 var fragment = Fragment() 형태로 생성자를 호출하는 순간에는 호출되지 않음

    파라미터로 전달되는 Context를 저장해 놓고 사용하거나 Context로부터 상위 액티비티를 꺼내서 사용합니다. 

    객체지향의 설계구조로 인해 onAttach()를 통해 넘어오는 Context에서만 상위 액티비티를 꺼낼 수 있습니다.

    

 onCreate()

    프래그먼트가 생성됨과 동시에 호출됨. 사용자 인터페이스인 뷰와 관련된 것을 제외한 프래그먼트 자원(변수)를 초기화 할깨 사용

 

 onCreateView()

    사용자 인터페이스와 관련된 뷰를 초기화하기 위해 사용

 

 onStart()

    액티비티의 startActivity로 새로운 액티비티를 호출하는 것처럼 프래그먼트가 새로 add되거나 화면에서 사라졌다가 다시 나타나면 onCreateView()는 호출되지 않고 onStart()만 호출됨. 주로 화면 생성후에 화면에 입력될 값을 초기화하는 용도로 사용됨

 

 onResume()

    onStart()와 같은 용도로 사용됨. 다른점은 소멸 주기 메서드가 onPause()상태에서 멈추고 현재의 프래그먼트가 가려지지않았을 때는 onStart()를 거치지 않고 onResume()이 바로 호출됨


소멸 주기 메서드

현재 프래그먼트 위로 새로운 프래그먼트가 add되거나 현재 프래그먼트를 제거하면 소멸주기와 관련된 메서드들이 순차적으로 호출됨

 

onPause()

    현재 프래그먼트가 화면에서 사라지면 호출됨. 주로 동영상 플레이어를 일시정지하는 것처럼 현재작업을 잠시 멈추는 용도로 사용

 

onStop()

    onPause()와 다른점은 현재 프래그먼트가 화면에 일부분이라도 보이면 onStop()은 호출되지 않음. 예를 들어 새롭게 add되는 프래그먼트가 반투명하다면 onPause()까지만 호출됨. 이것은 일시정지가아니라 작업을 정지하는 용도로 사용됩니다.

 

onDestroyView()

    뷰의 초기화를 해제하는 용도로 사용. 이메서드가 호출된 후에 생명주기 메서드인 onCreateView()에서 인플레이터로 생성한 View가 모두 소멸됨

 

onDestroy()

    액티비티에는 아직 남아있지만 프래그먼트 자체는 소멸됨. 프래그먼트에 연결된 모든 자원을 해제하는 용도로 사용

 

onDetach()
    액티비티에서 연결이 해제됨