[Android] Fragment - LifeCycle

원준·2023년 7월 27일

Android Studio

목록 보기
38/40

달라?

  • Activity의 LifeCycle과는 다르게 내부에서 각자 돌아가기에 다르다고 볼수 있다.

Fragment의 기본 클래스

1. FragmentManager

  • Activity 혹은 Frgment에서 휘하의 Fragment를 관리하는 클래스로, 각각 하나씩만 가지고 있다.
  • 해당 클래스를 통해 Activity - Fragment 혹은 부모 Fragment - 자식 Fragment 는 서로 상호작용을 할 수 있게 된다.

2. FragmentTransaction

  • 실직적으로 Fragment를 추가, 삭제 등 여러작업을 진행한다.
  • Fragment의 백스택 관리, Fragment 전환시 애니메이션 설정 역시 해당 클래스를 이용해 진행한다.

    백스택 ?
    사용자가 뒤로가기 버튼 클릭시, Activity 처럼 이전 Fragment 화면이 나오게 설정하는 것을 의미

  • 사용 메서드

    • add() : 새로운 Fragment를 컨테이너에 추가한다.
    • replace() : 기존 컨테이너에 있는 Fragment를 대체한다.
    • remove() : 컨테이너에 있는 Fragment를 제거한다.
    • show() : 컨테이너에 잇는 Fragment를 보여준다. (visibility = true)
    • hide() : 컨테이너에 있는 Fragment를 숨긴다. (visibility = false)
    • commit() : 작업을 실행한다.
    • commitNow() : 백스택이 없을 경우에만 사용하며, 작업을 즉시 수행한다.

Fragment - LifeCycle

1. onAttach()

  • FragmentActivity에 포함되는 순간 호출된다. 즉, Activity에 종속되는 과정

2. onCreate()

  • Fragment만 Create된 상황.
  • FramentManager에 add() 메서드가 완료했을 때 도달되는 onCreate() 콜백 함수를 호출한다.
  • 해당 시점에서는 아직 Fragment View가 생성되지 않았기 때문에 Fragment의 View와 관련된 작업을 두기에는 적절하지 않다.

3. onCreateView()

  • Fragment의 UI 구성을 위해 호출되며 Fragment View의 생명주기가 생성된다.
  • onCreateView()를 통해 반환된 View객체는 onViewCreated()의 파리멑로 전달된다.

4. onViewCreated()

  • onCreateView()를 통해 View 객체를 전달받으며, Fragment ViewLifeCycle이 INITIALIZED 상태로 언데이트 된다.
  • 해당 단계에서 View 초기 세팅을 하면 안정성을 보장 받을 수 있다.

5. onViewStateRestored()

  • 저장해둔 모든 state 값이 Fragment의 View 계층구조에 복원됐을때 호출된다.
  • 체크 박스 위젯이 현재 케츠 되어있는지 등 각 뷰의 상태값을 체크할 수 있다.

6. onStart()

  • 사용자가 보여질 수 있을때 호출된다.
  • Activity의 onStart() 시점과 유사하며, 해당 시점부터 Fragment의 child FragmentManager 통해 FragmentTransaction을 안전하게 수행할 수 있다.

7. onResume()

  • Fragment가 사용자와 상호작용할 수 있을때 onResume() 콜백이 호출된다.
  • Activity의 onResume()시점과 유사하다.
  • 호출되지 않은 시점에서 입력을 시도하거나 포커스를 설정하는 등 작업을 임의로 하면 안된다.

8. onPause()

  • 사용자가 Fragment를 떠나지만, 여전히 visible일때 onPause()가 호출된다.
  • 정확히는 Paused가 되는 상태가 아닌, Started상태가 된다.

9. onStop()

  • 부모 Activity, Fragment가 중단됐을 뿐만 아니라, ㄴ상태가 저장될때도 호출된다.

10. onDestroyView()

  • Fragment가 화면에서 사라진 후, Fragment View의 생명주기를 제거한다.
  • Fragment View에 대한 모든 참조를 제거해야 가비지 컬렉션이 이를 수거해갈 수 있다.
  • 만약 백스택을 처리했다면 onDestroy()로 가지않고 해당 단계에서 머무른다.

11. onDetach()

  • Fragment가 Activity에서 완전히 제거 될때 호출된다.

실제 동작 방식

profile
공부해보자

0개의 댓글