Lifecycle[2] Fragment

kimji1
3 min readMar 12, 2020

--

  • FragmentActivity 내의 어떤 동작 또는 사용자 인터페이스의 일부
  • 여러개의 프래그먼트를 하나의 액티비티에 결합하여 창이 여러 개인 UI를 빌드할 수 있으며, 하나의 프래그먼트를 여러 액티비티에서 재사용할 수 있음
  • 액티비티의 모듈식 섹션이라 생각할 수 있음, 자체적인 생명 주기를 가지고 자체 입력 이벤트를 수신하고 액티비티 실행 중 추가 및 삭제가 가능함
  • 항상 액티비티 내에서 호스팅 되어야 하며 해당 프래그먼트 생명 주기는 호스트 액티비티의 생명 주기에 직접적인 영향을 받음
    — 액티비티가 일시정지 되는 경우, 그 안의 모든 프래그먼트도 일시정지
    — 액티비티가 소멸되면 모든 프래그먼트도 마찬가지로 소멸
  • 액티비티가 실행 중인 동안에는 각 프래그먼트를 추가 또는 제거하는 개별적 조작을 할 수 있음
  • 프래그먼트 트랜잭션을 수행할 때는 이를 액티비티가 관리하는 백 스택에 추가할 수 있음
    — 각 백스택 항목은 발생한 프래그먼트 트랜잭션의 기록이 됨
    — 이 백스택을 이용하여 사용자가 프래그먼트 트랜잭션을 거꾸로 돌릴 수 있음
  • 레이아웃에 추가하면 해당 프래그먼트는 액티비티의 뷰 계층 내에서 ViewGroup에 들어가고 자체적인 뷰 레이아웃을 정의

디자인 철학

  • Android 3.0(API 11) 부터 도입
  • 하나의 프래그먼트를 다른 프래그먼트에서 직접 조작하는 것은 삼가야 함

생명 주기

  • Fragment는 3가지 상태로 존재할 수 있음
    — Resumed: 프래그먼트가 실행 중인 액티비티에 표시됨
    — Paused: 다른 액티비티가 포그라운드에 있고 포커스를 갖고 있지만, 이 프래그먼트가 있는 액티비티도 여전히 표시됨(포그라운드의 액티비티가 부분적으로 투명하거나 전체 화면을 덮지 않는 경우)
    — Stopped: 프래그먼트가 보이지 않음. 호스트 액티비티가 정지 되었거나 프래그먼트가 액티비티에서 제거되었지만 백 스택에 추가되어있음. 정지된 프래그먼트도 여전히 표시는 되지만 사용자에게는 더 이상 표시되지 않으며 액티비티를 종료하면 이것도 종료됨
  • 액티비티와 프래그먼트 생명 주기에서 가장 큰 차이점은 해당되는 백스택에 저장되는 방법
    — 기본적으로 액티비티는 정지되면 시스템에서 관리하는 액티비티의 백 스택에 들어감
    — 프래그먼트는 이를 제거하는 트랜잭션에서 addToBackStack()을 호출하여 인스턴스를 저장하라고 명시적으로 요청하는 경우에만 호스트 액티비티에서 관리하는 백 스택으로 들어감
  • 그 밖의 생명주기는 액티비티와 비슷함

onAttach(): 프래그먼트가 액티비티와 연결되어 있었던 경우 호출

onCreateView(): 프래그먼트와 연결된 뷰 계층을 생성하기 위해 호출

onActivityCreated(): 액티비티의 onCreate()메서드가 반환될 때 호출

onDestroyView(): 프래그먼트와 연결된 뷰 계층이 제거되는 중일 때 호출됨

onDetach(): 프래그먼트가 액티비티와 연결이 끊어지는 중일 때 호출

--

--

kimji1
kimji1

No responses yet