프래그먼트는 액티비티를 본따 만들면서 액티비티처럼 독립적으로 동작하도록 수명주기 메소드를 추가하였다.
프래그먼트는 액티비티 위에 올라가는 것이므로 프래그먼트의 수명주기도 액티비티의 수명주기에 종속적이지만, 프래그먼트만 가질 수 있는 독립적인 상태 정보들이 더 추가되었다.
프래그먼트가 화면에 보이기 전까지 호출될 수 있는 수명주기 메소드는 다음과 같다.
메소드 | 설명 |
---|---|
onAttach(Activity) | 프래그먼트가 액티비티와 연결될 때 호출됨. |
onCreate(Bundle) | 프래그먼트가 초기화될 때 호출됨. (new 연산자를 이용해 새로운 프래그먼트 객체를 만드는 시점이 아니라는 점에 주의해야 함) |
onCreateView(LayoutInflator, ViewGroup, Bundle) | 프래그먼트와 관련되는 뷰 계층을 만들어 리턴함. |
onActivityCreated(Bundle) | 프래그먼트와 연결된 액티비티가 onCreate 메소드의 작업을 완료했을 때 호출됨. |
onStart() | 프래그먼트와 연결된 액티비티가 onStart되어 사용자에게 프래그먼트가 보일 때 호출됨. |
onResume() | 프래그먼트와 연결된 액티비티가 onResume되어 사용자와 상호작용할 수 있을 때 호출됨. |
우선 주의점으로 프래그먼트 객체는 new 연산자로 만들어졌더라도 액티비티 위에 올라가기 전까지는 프래그먼트로 동작하지 않는다. 즉 new 연산자를 사용해 프래그먼트 객체를 만드는 시점과onCreate 메소드가 호출되는 시점이 달라진다.
이는 프래그먼트는 액티비티에 종속되어 있어 프래그먼트와 액티비티가 연결되어야 초기화 될 수 있어야 하기 때문이다.
먼저 onAttach 메소드가 호출되며 액티비티가 프래그먼트에 추가되고 그 다음에 onCreate 메소드가 호출된다.
즉 onAttach 메소드가 호출될 때 파라미터로 전달되는 액티비티 객체 위에 프래그먼트가 올라가게 된다.
onAttach 메소드는 이러한 액티비티를 위해 설정해야 하는 정보들을 처리한다.
onCreateView 메소드는 프래그먼트와 관련되는 뷰들의 계층도를 구성하는 과정에서 호출된다.
액티비티가 메모리에 처음 만들어질 때는 액티비티의 onCreate 메소드가 호출되지만 프래그먼트의 경우에는 onActivityCreated 메소드가 호출된다.
이 메소드는 프래그먼트에서 액티비티가 만들어지는 상태를 알 수 있도록 해준다.
프래그먼트가 화면에서 보이지 않게 되면서 호출되는 상태 메소드들은 다음과 같다.
메소드 | 설명 |
---|---|
onPause() | 프래그먼트와 연결된 액티비티가 onPause되어 사용자와 상호작용을 중지할 때 호출됨. |
onStop() | 프래그먼트와 연결된 액티비티가 onStop되어 화면에서 더 이상 보이지 않을 때나 프래그먼트의 기능이 중지되었을 때 호출됨. |
onDestroyView() | 프래그먼트와 관련된 뷰 리소스를 해제할 수 있도록 호출됨. |
onDestroy() | 프래그먼트의 상태를 마지막으로 정리할 수 있도록 호출됨. |
onDetach() | 프래그그먼트가 액티비티와 연결을 끊기 바로 전에 호출됨. |
onPause와 onStop은 액티비티의 동일한 메소드가 호출될 때오 같은 상태 메소드이다.
onDestroyView 메소드는 프래그먼트 안에 들어 있는 뷰들의 리소스를 해제할 때 재정의하여 사용한다.
onDetach 메소드는 onAttach 메소드와 반대로 프래그먼트가 액티비티와 연결을 끊기 바로 전에 호출된다.
프래그먼트 수명주기를 정리하면 이렇게 된다.