일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 한달독서
- 안드로이드
- 목적중심리더십
- 목적 중심 리더십
- 소프시스
- 슬기로운 온라인 게임
- 끝말잇기
- 아비투스
- 베드테이블
- 지지않는다는말
- 자취필수템
- 북한살둘레길
- 재택근무
- 캐치마인드
- 한달브런치북만들기
- 한달어스
- 1일1커밋
- 소프시스 밤부 좌식 엑슬 테이블
- 프래그먼트
- 베드트레이
- 한단어의힘
- 리얼하다
- 커스텀린트
- 브런치작가되기
- 테트리스
- T자형인재
- 좌식테이블
- 함수형 프로그래밍
- 면접
- 어떻게 나답게 살 것인가
- Today
- Total
정상에서 IT를 외치다
[Android, FragmentPagerAdapter] FragmentPagerAdapter 와 FragmentStatePagerAdapter 의 차이 본문
[Android, FragmentPagerAdapter] FragmentPagerAdapter 와 FragmentStatePagerAdapter 의 차이
Black-Jin 2018. 6. 4. 16:54안녕하세요. 블랙진입니다.
이번에는 FragmentPagerAdapter 와 FragmentStatePagerAdapter 의 차이에 대해 포스팅 해보겠습니다.
설명하기 앞서 ViewPager 를 만드는 법에 대해 포스팅한게 있습니다.
ViewPager 동작에 대해 알고 이 포스팅을 보시면 이해하는데 훨씬 도움이 될 것 같습니다. ~!
FragmentPagerAdapter 와 FragmentStatePagerAdapter 의 차이
- FragmentPagerAdapter 에서는 프래그먼트 개 수가 정해진 화면에 사용하면 좋다.
프래그먼트 매니저에서 한 번 생성된 프래그먼트의 인스턴스를 제거하지 않고 연결된 View 만 제거합니다.
- FragmentStatePagerAdapter 에서는 프래그먼트 개 수가 변하는 화면에 사용하면 좋다.
프래그먼트 매니저에서 한 번 생성된 프래그먼트의 인스턴스를 완전히 제거하여 메모리 누수 문제에 적합하게 대응할 수 있습니다.
위 내용은 참고자료2 혹은 프래그먼트 생명주기를 보면 이해하기 쉬운데요.
프래그먼트 생명주기는
생성시
onCreate - onCreateView - onViewCreated - onActivityCreated - onStart - onResume
종료시
onPause - onStop - onDestroyView - onDestroy - onDetach
순서로 진행됩니다.
ViewPager 특징 중 하나는 좌우에 있는 화면을 미리 생성 하고 다른 화면으로 넘어가면 지난 화면을 제거합니다.
예를 들어 "ViewPager를 만드는 법" 의 예제를 실행 하면 (A ~ E 5개의 화면으로 구성된 뷰페이저 입니다.)
A 화면과 B 화면이 만들어 지고 B 화면으로 스와이프 하면 C 화면이 생성됩니다. 여기서 다시 C 화면으로 넘어가면 D 화면이 미리 생성 되고 A 화면은 제거됩니다. 즉 뷰페이저 에는 B C D 3가지 화면만 존재하게 됩니다. 다시 여기서 C 화면을 보고 있는데 D 화면으로 이동 하면 E 화면이 생성되고 B 화면은 제거되는 구조입니다.
참고로 좌우 미리 생성될 화면의 갯수는 viewPager 의 setOffScreenPageLimit 를 통해 바꿀수 있습니다.
FragmentPagerAdapter 를 사용하면 처음 프래그먼트가 생성 될 때 onCreate - onCreateView 가 실행됩니다. 다른 화면으로 이동 하여 뷰가 제거되면 onDestroyView 만 실행 되고 onDestroy - onDetach 는 실행 되지 않습니다. 이말은 우리가 MainActivity 에서 MainAdapter 로 보낸 FragmentManger 가 프레그먼트를 제거하지 않고 View 만 다시 그려주고 있다는 것을 의미합니다. 역시 다시 이전의 화면으로 돌아 왔을 때에도 onCreate 는 실행되지 않고 onCreateView 부터 실행 됨을 로그로 확인해 봤습니다.
반대로 FragmentStatePagerAdapter 에서는 onCreate - onCreateVIew 와 onDestroy - onDestroyView 모두 실행 되면서 메모리를 효과적으로 관리할 수 있게 도와줍니다. 즉 ViewPager 를 유동적으로 변경할 건지 않할 건지에 따라 선택하여 사용하면 되겠습니다.
'안드로이드' 카테고리의 다른 글
[Android, TabLayout] 탭 레이아웃의 모든것! (2) | 2018.06.04 |
---|---|
[Android, setUserVisibleHint] 뷰페이저에서 보인 화면만 데이터 받아오기 (0) | 2018.06.04 |
[AndroidManifest] singleTask, noHistroy, parentActivityName 에 대해서 (0) | 2018.06.01 |
[Android, ConstraintLayout, Barrier] 3. ConstraintLayout 배리어 설정하기 (0) | 2018.05.18 |
[Android, ConstraintLayout, GuideLine] 2. ConstraintLayout 가이드라인 설정하기 (0) | 2018.05.18 |