ViewPager를 활용하여 Framgent를 관리해주는 Adapter이다.
-FragmentPagerAdapter, FragmentStatePagerAdapter 차이점
- FragmentPagerAdapter 는 전체 프래그먼트를 메모리에 저장하므로 많은 양의 프래그먼트가 ViewPager 에서 사용되면 메모리 오버 헤드가 증가한다.
- 반대로 FragmentStatePagerAdapter 는 프래그먼트의 savedInstanceState 만 저장하고 포커스가 손실되면 모든 프래그먼트를 파괴한다.
- 따라서 FragmentStatePagerAdapter 는 데이터가 savedInstanceState 저장 될 수 있기 때문에 위젯이 있는 Fragment와 같은 동적 Fragment를 사용해야 할 때 사용해야한다. 또한 많은 Fragment가 있어도 성능에 영향을 미치지 않는다.
- 반대로 그 형제 FragmentPagerAdapter 는 전체 Fragment들을 메모리에 저장할 필요가있을 때 사용한다.
- 전체 조각이 메모리에 유지된다고 말하면, 그 인스턴스는 파괴되지 않고 메모리 오버 헤드를 생성한다. 따라서 ViewPager 의 프래그먼트 수가 적을 경우에만 FragmentPagerAdapter 를 사용하는 것이 좋다.
- 인스턴스가 저장 될 객체가 너무 많지 않으므로 Fragment가 정적 인 것이 더 좋다.
즉, FragmentStatePagerAdapter는 다른 Fragment로 이동하여도 생성된 Fragment의 상태를 저장하고 있다가 해당 Activity의 Focus가 손실되면 프래그먼트를 파괴하는 것이다.
FragmentStatePagerAdapter의 장점
FragmentPagerAdapter의 경우 빠르게 탭을 이동하는 경우 탭의 이동마다 프래그먼트의 통신을 다시 요청하는데 문제는 이 요청에 대한 데이터가 도착하기 전에 빠르게 재요청을 하게되면 앱이 터지게된다는 것이다.
이를 방지하기 위해서는 통신마다 큐를 하나 더만들어 통신의 요청에 큐에 해당하는 키워드를 enqueue하고 통신이 완료되면 dequeue하는 식으로 방지를 해주거나 통신이 완료되기 전에 터치를 막는 등의 방법을 사용해야할 것이다.
그러나 우리의 FragmentStatePagerAdapter는 그럴 필요가 없다.
FragmentStatePagerAdapter가 생성될 때 Fragment들을 생성하며 해당하는 통신을 마친 후 탭의 이동에도 재통신
이 이루어지지 않기때문이다.
그러므로 재통신을 하는 Refresh 통신을 필수적으로 구현해주어야한다. 그렇지 않다면 재통신이 필요할 때 재통신을 위해 다른 Activity로 이동하고 복귀해야하는 상황이 발생하기 때문이다.
또한 FragmentStatePagerAdapter를 쓴다면 프래그먼트 안에 존재하는 RecyclerView의 상태나 ViewPager의 상태, 즉 프
래그먼트의 상태를 저장하고 있어 다른 프래그먼트로 이동하거나 할 때 해당 스크롤의 위치라던지, 프래그먼트의 상태를 저장하는 코드가 필요없어진다.
♥ click..
'■ Android > Tip' 카테고리의 다른 글
[Android] Toolbar(=?액션바) 없애기 (0) | 2019.10.20 |
---|---|
[Android] SharedPreferences 사용법 (0) | 2019.10.19 |
[Android] 단축키(Shortcut Key) (0) | 2019.07.21 |
Firebase에서 Database에 필드별 정렬 (0) | 2019.07.20 |
[Android] 화면 고정하기 - 가로모드, 세로모드 (0) | 2019.07.17 |