일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- DataBinding
- onMeasure
- Behavior
- 알림
- HTTP
- Navigation
- lifecycle
- kotlin
- CustomView
- BOJ
- Coroutine
- ViewModel
- AppBarLayout
- Android
- hilt
- LiveData
- Algorithm
- activity
- recyclerview
- View
- 안드로이드
- 코틀린
- CollapsingToolbarLayout
- onLayout
- CoordinatorLayout
- 백준
- room
- 알고리즘
- sqlite
- notification
- Today
- Total
개발일지
Android in A..Z - Fragment 본문
Fragment는 Activity에서 UI 일부를 나타냅니다. 하나의 Activity에서 여러 Fragment를 사용하여 UI를 구축할 수 있으며, 여러 Activity에서 Fragment가 재사용될 수 있습니다. Fragment는 Activity처럼 사용자에게 입력을 받고 생명주기를 가집니다. 즉 Activity를 모듈화한 것으로 생각하면 됩니다.
Fragment의 생명주기는 Activity 생명주기에 영향을 받습니다. (Activity가 PAUSE 상태고 들어가면 Fragment도 PAUSE 상태로 들어가고, Activity가 DESTROY되면 Fragment도 DESTROY됩니다.)
Fragment는 FragmentManager로 관리되며 FragmentManager를 좀 더 간편하게 사용하기 위해 Jetpack에서 Navigation Component를 지원합니다.
* 독립된 화면을 만들고 모듈식으로 사용하기 위해 사용한다.
* 독립된 화면에서 생명주기를 통해 화면의 상태나 사용자의 입력을 효율적으로 관리할 수 있다.
onAttach - onDetach
onCreate전에 Fragment가 Activity에 등록될 때 호출됩니다. 매개변수로 Context가 전달됩니다. Detach된 Fragment는 Context를 잃기 때문에 getContext()를 호출하면 null이 반환되고, requireContext()를 호출하면 Exception이 발생합니다.
* onCreate가 호출되기 전이며 Fragment가 생성되기 전입니다.
The onAttach() callback is invoked when the fragment has been added to a FragmentManager and is attached to its host activity. At this point, the fragment is active, and the FragmentManager is managing its lifecycle state. At this point, FragmentManager methods such as findFragmentById() return this fragment.
onCreate - onDestroy
시스템에서 Fragment를 생성할 때 호출됩니다.
* View가 생성되기 전이기 때문에 UI관련 작업을 할 수 없습니다.
As such, you can not rely on things like the activity's content view hierarchy being initialized at this point.
onCreateView - onDestroyView
UI를 처음으로 그릴 시점에 호출됩니다. Layoutinflater를 통해 View를 생성하고 리턴합니다. UI를 제공하지 않을 경우 null을 리턴한다.
* 주된 목적은 View를 Inflate하는 작업이다.
This is optional, and non-graphical fragments can return null. This will be called between onCreate and onViewCreated.
onViewCreated
onCreateView 직후 View가 만들어 졌을 때 호출됩니다. (savedInstance가 복원되기 전)
*주된 목적은 View를 초기화하는 작업이다.
Called immediately after onCreateView has returned, but before any saved state has been restored in to the view. This gives subclasses a chance to initialize themselves once they know their view hierarchy has been completely created. The fragment's view hierarchy is not however attached to its parent at this point.
onStart - onStop
Activity와 마찬가지로 UI가 표현되기 전에 호출된다.
onResume - onPause
Activity와 마찬가지로 사용자와 상호작용 전에 호출된다.
Fragment Lifecycle vs Fragment ViewLifecycle
Fragment Lifecycle은 onAttach ~ onDestroy의 생명주기를 가진다.
Fragment ViewLifecycle는 onCreateView ~ onDestroyView의 생명주기를 가진다.
즉 ViewLifecycle이 Lifecycle보다 생명주기가 짧고, Fragment가 onDestroy되기 전에 onCreateView가 여러번 호출될 경우가 발생한다.
Fragment같은 컴포넌트는 Fragment안에 View로 UI를 표현하기 때문에 Fragment와 View의 Lifecycle을 분리함으로써 좀 더 Lifecycle을 세세하게 관리할 수 있다.
만약 LiveData를 사용할 때 lifecycle로 Fragment Lifecycle를 onCreateView 이후에 주는 경우, Observer가 여러개 생길 가능성이 있다. LiveData를 사용할 때 ViewLifecycle를 전달하자.
*** 구글 Sample에서 실수했던 코드
'Android (안드로이드)' 카테고리의 다른 글
Android in A..Z - Broadcast Receiver (0) | 2021.10.07 |
---|---|
Android in A..Z - Service (0) | 2021.10.07 |
Android in A..Z - Glide Advanced (0) | 2021.10.01 |
Android in A..Z - Span (0) | 2021.09.16 |
Android in A..Z - Module 베포 (Jitpack) (0) | 2021.09.02 |