1.Fragment
-프래그먼트란?
액티비티 내에 배치되어 사용자 인터페이스를 구성하는 안드로이드 구성요소 중 하나이다.
액티비티 내에서 호스팅 되어야하며 프래그먼트의 수명주기는 호스트 액티비티의 수명주기에 직접적으로 영향을 받는다.
프래그먼트를 액티비티 레이아웃에 추가하면 해당 프래그먼트는 액티비티의 뷰 계층 내에서 ViewGroup에 들어가고 자체적인 뷰 레이아웃을 정의한다. 액티비티 레이아웃 파일에서 <fragment> 요소로 프래그먼트를 선언하거나 기존의 ViewGroup에 추가하는 방법으로 선언하여 프래그먼트를 액티비티 레이아웃에 삽입할 수 있다.
-프래그먼트 특징
1.액티비티 내에만 존재할 수 있다.
2.액티비티의 생명주기 내에서 프래그먼트만의 생명주기를 가진다.
3.액티비티가 중지되면 액티비티 내의 프래그먼트는 다시 시작할 수 없다.
4.액티비티가 소멸되면 액티비티 내의 프래그먼트들은 모두 소멸된다.
5.프래그먼트는 필요할 때 생성할 수 있으며 상태를 저장하고 복원할 수 있다.
6.프래그먼트는 상태와 백스택을 가진다.
(백스택이란 액티비티가 열린 순서대로 쌓인 스택을 다시 되돌아가는 것을 의미한다.)
7.프래그먼트는 액티비티 내에서 UI없이도 존재할 수 있다.
-네이버 블로그 앱에서 Fragment가 사용된 부분
네이버 블로그 앱은 bottom navigation button들을 눌러서 원하는 서비스를 이용할 수 있는데 bottom navigation button을 눌러서 나오는 모든 화면이 Fragment로 구성되어 있다.
2.네이버 블로그 앱의 Activity 생명주기와 Fragment 생명주기
onCreate() -> 액티비티가 만들어질 때 호출된다. 네이버 블로그 앱을 실행한 상태이다.
onStart() -> 네이버 블로그 앱을 실행하고 화면에 액티비티가 보여질 때 호출되는 메서드이다.
onResume() -> 현재 실행중이며 화면에 나타나는 상태일 때 호출되는 메서드이다.
onPause() -> 액티비티 화면의 일부가 다른 액티비티에 가려질 때 호출된다.
onStop() -> 화면이 없어질 때, 다른 액티비티가 실행되어 화면이 완전히 가려질 때 호출되는 메서드이다.
onDestroy()-> 어플의 액티비티가 소멸되기 전에 호출된다. 액티비티 화면을 완전히 닫거나 종료 되는 경우 혹은 기기 회전이나 멀티 윈도 모드로 인해 시스템이 일시적으로 액티비티를 소멸시키는 경우 호출된다.
다음으로 프래그먼트는 생성에 관련된 5개와 소멸에 관련된 5개를 가지고 있다.
-생성주기 메서드
생성과 관련된 5개의 생명주기 메서드가 있지만 프래그먼트를 포함하고 있는 액티비티가 화면에 계속 나타나고 있는 상태에서는 onAttach()부터 onResume()까지의 메서드가 모두 한번에 호출된다.
1.onAttach()
프래그먼트 매니저를 통해 액티비티에 프래그먼트가 추가되고 commit되는 순간 호출된다.
2.onCreate()
프래그먼트가 생성됨과 동시에 호출된다. 사용자 인터페이스인 뷰와 관련된 것을 제외한 프래그먼트 자원을 초기화 할때 사용한다.
3.onCreateView()
Fragment에 쓰일 view들을 정의하고 초기화하게된다. container를 통해 Fragment가 어느 위치에 자리잡아야 할지 전달받는다. 그리고 Fragment상에 생성된 뷰들을 종속된 액티비티 뷰에 리턴해주어서 화면에 표시한다.
4.onStart()
Fragment가 새로 add되거나 화면에서 사라졌다가 다시 나타나면 이 메서드만 호출된다. 주로 화면 생성 후에 화면에 입력될 값을 초기화하는 용도로 사용된다.
5. onResume()
onStart()와 같은 용도로 사용된다. 다른 점이 있다면 소멸 주기 메서드가 onPause()상에서 멈췄을 때, 현재 프래그먼트의 일부가 가려지지 않았을 때는 onStart()를 거치지 않고 이 메서드가 바로 호출된다.
-소멸주기 메서드
현재 Fragment를 제거하면 소멸주기와 관련된 메서드가 순차적으로 호출된다.
1.onPause()
현재 프래그먼트가 화면에서 사라지면 호출된다. 주로 동영상 플레이어를 일시정지한다거나 현재 작업을 잠시 멈추는 용도로 사용된다. 이 시점에서 남겨두어야 하거나 영구적으로 보존해야 할 데이터를 저장하게 된다.
2.onStop()
onPause()와 다른 점은 현재 프래그먼트가 화면에 일부분이라도 보이면 onStop()은 호출되지 않는다. 예를 들어 add되는 새로운 프래그먼트가 반투명하면 onPause() 까지만 호출된다. 동영상 플레이어를 예로 든다면 일시정지가 아닌 정지를 하는 용도로 사용된다.
3.onDestroyView()
뷰의 초기화를 해제하는 용도로 사용된다. 이 메서드가 호출된 후에 생성 주기 메서드인 onCreateView()에서 인플레이터로 생성한 View가 모두 소멸된다.
4.onDestroy()
액티비티에는 아직 남아있지만 프래그먼트 자체는 소멸된다. 프래그먼트에 연결된 모든 자원을 해제하는 용도로 사용된다.
5.onDetach()
액티비티에서 연결이 해체된다.
'Frontend > Kotlin' 카테고리의 다른 글
Unit 5 (0) | 2023.01.10 |
---|---|
RecyclerView구현 (0) | 2022.12.09 |
unit 3 강의 정리 (0) | 2022.11.16 |
2번째 스터디 과제 (0) | 2022.11.14 |
1주차-Solution (0) | 2022.11.07 |