JongTachi의 개발 블로그

All of Fragment 본문

Android

All of Fragment

JongTachi 2022. 6. 20. 16:50
728x90
반응형

1. Fragment

Fragment는 FragmentActivity 내의 어떤 동작 또는 사용자 인터페이스의 일부를 나타낸다. 여러개의 fragment를 하나의 activity에 결합하여 창이 여러 개인 개인 UI를 만들수 있으며, 하나의 fragment를 여러 activity에서 재사용할 수 있다. fragment는 자체적인 수명 주기를 가지고, activity 실행 중에 추가 및 삭제가 가능하다.

 

fragment는 항상 activity 내에서 호스팅되어야 하며, fragment의 수명 주기는 호스트 activity의 수명주기에 직접적으로 영향을 받는다. 예를 들어 activity가 일시정지되는 경우, 그 안의 모든 fragment도 일시정지되며 엑티비티가 소멸되며녀 모든 fragment도 마찬가지로 소멸된다. 

 

2. Fragment 생명주기

Fragment LifeCycle

1) onCreate()

fragment를 생성할 때 시스템에서 onCreate()를 호출한다. 구현 내에서 fragment의 기본 요소 중 fragment가 일시정지 되거나 중단되었다가 재개되었을 때 유지하고자 하는 것을 초기화해야한다.

 

2) onCreateView()

시스템은 fragment가 자신의 사용자 인터페이스를 처음으로 그릴 시간이 되면 이것을 호출한다. fragment에 맞는 UI를 그리려면 메서드에서 view를 반환해야 한다. 이 메서드는 fragment 레이아웃의 루트이다. fragment가 UI를 제공하지 않는 경우 null을 반환하면 된다.

 

3) onPause()

사용자가 fragment를 떠날 때 호출되는 메서드이자 첫 번째 신호이다.(다만 항상 fragment가 소멸 중이라는 것을 의미하지는 않는다.) 일반적으로 여기에서 현재 사용자 세션을 넘어서 지속되어야 하는 변경 사항을 커밋한다.(사용자가 돌아오지 않을 수 있기 때문)

 

3. fragment 수명 주기 처리

fragment의 수명 주기를 관리하는 것은 액티비티의 수명 주기를 관리하는 것과 매우 흡사하다. 액티비티와 마찬가지로 fragment도 세 가지 상태로 존재할 수 있다.

 

1) 재개됨(Resumed)

fragment가 실행 중인 엑티비티에 표시된다.

 

2) 일시정지됨(Paused)

다른 액티비티가 포그라운드에 있고 포커스를 갖고 있지만, 이 fragment가 있는 액티비티도 여전히 표시된다.

 

3) 정지됨(Stopped)

fragment가 보이지 않는다. 호스트 액티비티가 정지되었거나 fragment가 엑티비티에서 제거되었지만 백 스택에 추가되었다. 정지된 fragment도 여전히 표시는 된다. 하지만 사용자에게는 더이상 표시되지 않으며 액티비티를 종료하면 이것도 종료된다.

 

 

4. 액티비티와 fragment의 차이점

액티비티fragment의 수명주기에서 가장 중대한 차이점은 해당되는 백스텍에 저장되는 방법에 따라 다르다. 기본적으로 엑티비티는 정지되면 시스템에서 관리하는 액티비티의 백 스텍에 들어간다. 하지만 fragment는 이를 제거하는 트랜잭션에서 addToBackStack()을 호출하여 인스턴스를 저장하라고 명시적으로 요청할 경우에만 호스트 엑티비티에서 관리하는 백 스택으로 들어간다.

 

5. 액티비티 수명주기와 fragment의 조화

fragment가 있는 액티비티의 수명 주기는 해당 fragment의 수명 주기에 직접적인 영향을 미친다. 따라서 엑티비티에 대한 각 수명 주기 콜백이 각 fragment에 대한 비슷한 콜백을 발생시킨다. 예를들어 액티비티가 onPause()를 받으면, 해당 액티비티 내의 각 fragment가 onPause()를 받는다. 

 

하지만 fragment에는 fragment의 UI를 빌드하고 소멸시키는 등의 같은 작업을 수행하기 위해 액티비티와의 고유한 상호작용을 처리하는 몇 가지 수명 주기 콜백이 더 있다.

 

1) onAttach() : fragment가 액티비티와 연결되어 있었던 경우 호출된다.(여기서 액티비티가 전달)

2) onCreateView() : fragment와 연결된 뷰 계층을 생성하기 위해 호출

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

4) onDestroyView() : fragment와 연결된 뷰 계층이 제거되는 중일 때 호출

5) onDetach() : fragment가 액티비티와 연결이 끊어지는 중일 때 호출

 

728x90
반응형

'Android' 카테고리의 다른 글

Service Life_Cycle  (0) 2022.06.06
Android Activity-LifeCycle  (0) 2022.05.19
Android 구조  (0) 2022.05.18
Android Storage  (0) 2022.05.16