정상에서 IT를 외치다

[Android, FragmentPagerAdapter] FragmentPagerAdapter 와 FragmentStatePagerAdapter 의 차이 본문

안드로이드

[Android, FragmentPagerAdapter] FragmentPagerAdapter 와 FragmentStatePagerAdapter 의 차이

Black-Jin 2018. 6. 4. 16:54
반응형

안녕하세요. 블랙진입니다.


이번에는 FragmentPagerAdapter 와 FragmentStatePagerAdapter 의 차이에 대해 포스팅 해보겠습니다.


설명하기 앞서 ViewPager 를 만드는 법에 대해 포스팅한게 있습니다.


 ViewPager 동작에 대해 알고 이 포스팅을 보시면 이해하는데 훨씬 도움이 될 것 같습니다. ~!




FragmentPagerAdapter 와 FragmentStatePagerAdapter 의 차이


참고자료1,  참고자료2



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 를 유동적으로 변경할 건지 않할 건지에 따라 선택하여 사용하면 되겠습니다.

반응형
Comments