Fragment 란?
Activity 개념과 View 개념이 합쳐진 것이라고 할 수 있습니다.
- View : Activity 위에 놓이는 layout 이나 Button 같은 그림들
- Activity : View 를 올릴 수 있는 도화지
- Fragment : Activity 라는 도화지 위에 얹는 도화지 느낌
Fragment 를 왜 사용할까요?
Activity 를 변경하지 않고, Fragment 를 변경하는 것만으로도 Activity 위에 보이는 view 를 손쉽게 변경 가능합니다.
Fragment 주된 특징
- Activity 를 분할하여 화면의 한 부분을 정의
- 액티비티와 같이 레이아웃, 동작처리 ,생명주기를 가지는 독립적인 모듈
- 다른 액티비티에서도 사용할 수 있어 재사용성이 뛰어남
- 액티비티 내에서 실행 중 추가/제거가 가능합니다.
- 프래그먼트는 필수적으로 하나의 액티비티에 종속되어야 합니다.
Fragment 생명주기
생명주기를 지키지 않는다면 메모리 누출 또는 비정상 종료가 발생할 수 있습니다.
프래그먼트를 생성할 때 호출됩니다.
프래그먼트가 일시정지 혹은 중단 후 재개되었을 때 유지하고 있어야하는 것을 여기서 초기화해야합니다.
프래그먼트를 생성하면서 넘겨준 값들이 있다면, 여기서 변수에 넣어주면 됩니다. 하지만 여기서는 UI 초기화는 못합니다.
프래그먼트가 자신의 인터페이스를 처음 그리기 위해 호출합니다.
View 를 반환해야 합니다. 그래서 버튼이나 텍스트 뷰 등을 초기화 할 수 있습니다.
이 메서드는 프래그먼트의 레이아웃 루트이기 때문에 UI 를 제공하지 않는 경우 null 을 반환합니다.
사용자가 프래그먼트를 떠나면 첫번째로 이 메서드를 호출합니다.
예를 들어, 홈 버튼을 눌러 화면에서 벗어나게 되면 이 메서드가 호출됩니다.
그래서 프래그먼트의 부모 액티비티가 아닌, 다른 액티비티가 foreground 로 나오게 되면, onPause 를 콜하고 backstack 으로 들어감
액티비티가 시작됨 상태에 들어가면 이 메서드를 호출합니다.
사용자에게 프래그먼트가 보이게 되고, 이 메서드에서 UI 를 관리하는 코드를 초기화합니다.
이 메서드가 완료되면 Resumed 상태로 들어가 onResume() 을 호출합니다.
이 상태에 들어갔을 때 사용자와 상호작용 합니다.
어떤 이벤트가 발생하여 포커스가 떠날 때까지 이 상태에 머무릅니다.
프로그램이 일시 정지되어 onPause() 를 호출하고 다시 재게되면 onResume() 메서드를 호출합니다.
즉, 유저에게 프래그먼트가 보여지고 상호작용 직전에 호출되는 함수입니다.
다른 액티비티가 완전히 화면을 가리게 되면 호출합니다.
여기에 화면에 보이지 않을 때 실행할 필요가 없는 기능을 모두 정지할 수 있습니다.
유저가 다시 해당 액티비티를 호출하면 다시 복원할 수 있는 상태입니다.