https://goni95.tistory.com/173
Fragment 탄생 배경
안드로이드 초기 작은 화면의 디바이스만 있던 시절엔 Activity만으로 UI를 구성하는데 어려움이 없었지만, 현재 다양한 화면의 디바이스가 출시되면서 Activity를 중첩하며 다양한 시도를 했지만, 생명주기 외에 구조적인 문제들로 Activity만으로 화면을 구성하기가 힘들었고, 넓은 화면을 효율적으로 이용하기 위해서 Fragment가 만들어졌습니다.
1️⃣ Activity와 Fragment 생명주기
1. Activity 생명주기
사용자가 애플리케이션과 상호작용 하면서 Activity의 상태가 변경되면 Android 시스템이 상태가 변경되었음을 알기위해 콜백 메서드를 호출하게 됩니다. Activit 생명주기 메서드에는 onCreate(), onStart(), onRestart(), onResume(), onPause(), onStop() 및 onDestroy()가 있습니다.
액티비티가 처음 생성될 시 onCreate()가 호출이 됩니다. (초기화 작업)
액티비티가 사용자에게 보여지기 직전에 onStart()가 호출이 됩니다.
액티비티가 중단되었다가, 다시 시작되기 직전에 onRestart()가 호출됩니다.
액티비티가 사용자에게 보여질때 onResume()이 호출됩니다. (애플리케이션과 상호작용 가능)
액티비티가 가려지거나, 포커스를 잃은 경우 onPause()가 호출됩니다.
액티비티가 더이상 사용자에게 보여지지 않으면 onStop()이 호출됩니다.
액티비티가 소멸되기 직전에 onDestroy()가 호출됩니다.
2. Fragment 생명주기
Fragment 생명주기가 변경되면, Android 시스템에서 상태가 변경됨을 알기위해 콜백 메서드를 호출하게 됩니다. Fragment 생명주기 콜백 메서드에는 onAttach(), onCreate(), onCreateView(), onCreateView(), onStart(), onResume(), onPause(), onStop(), onDestroyView(), onDestroy(), onDetach()가 있습니다.
- Activity Created -
onAttach() : 프래그먼트가 종속될 Activity의 Context를 인자로 받아 액티비티와 붙을 때 최초 한번 호출되며, 완벽하게 생성된 상태는 아닙니다.
onCreate() : 프래그먼트가 Activity에 의해 생성되는 시점에 호출되며, 액티비티의 Bundle을 인자로 받고, 액티비티와 다르게 UI 관련 작업을 할 수 없습니다.
onCreateView() : Layout을 inflate하여 프래그먼트의 View가 생성될 때 호출되지만, View가 초기화 중이기 때문에 충돌이 발생할 수 있어 UI 컴포넌트를 초기화하는 작업은 액티비티의 onCreate()가 끝나고 View가 완전히 생성되었을 때 호출되는 onViewCreated() 메서드에서 View에 대한 초기화를 하는게 좋습니다.
onViewStateRestored() : 저장해둔 모든 상태 값이 복원됐을 때 호출됩니다. 띠라서 각 UI 컴포넌트의 상태값을 체크할 수 있습니다.
onStart() : 프래그먼트가 사용자에게 보여지기 전에 호출되는 함수입니다.
onResume() : 프래그먼트가 화면에 보여질 때 호출되며, 사용자와의 상호작용이 가능합니다.
onPause() : 화면의 일부가 가려졌거나, 포커스를 잃은 경우에 호출됩니다.
onStop() : 프래그먼트가 더 이상 사용자에게 보여지지 않을 때 호출되며, 프래그먼트의 기능이 중지됩니다.
onDestroyView() : 프래그먼트의 View를 제거할 때 호출됩니다. (액티비티에서 프래그먼트 생성 시 addToBackStack()을 요청한 경우 onDestroy를 호출하지 않고 Instance가 저장되어 있다가 Fragment를 다시 부를 때 onCreateView()를 실행하여 다시 화면에 표시합니다.)
onDestroy() : View가 제거된 후 프래그먼트가 완전히 소멸되기 전에 호출됩니다.
onDetach() : 프래그먼트가 완전히 소멸되고, 액티비티와의 연결이 끊어질 때 호출됩니다.
- Activity Destroyed -
2️⃣ Activity, Fragment 차이
Activity는 디스플레이의 전체화면을 차지하며 View를 가질 수 있으면서 독립적으로 활용할 수 있는 큰 틀로 Back Stack에 자동적으로 넣어지지만,
Fragment는 디스플레이의 작은 부분만 차지하도록 사용할 수 있기 때문에 디자인에 유연성을 가지며 Activity와 View의 특성을 모두 가지고 있어 Activity에 종속적인 소형 틀로 Activity와 Fragment를 이어주는 역할을 하는 FragmentManager를 이용해 Transaction을 통해 Fragment를 추가, 삭제, 교체하는 작업을 요청해야 합니다.