IT/Android

[Android] FragmentPagerAdapter와 FragmentStatePagerAdapter 차이

토마토조아 2019. 8. 27. 10:52
728x90

Android 개발을 하다 보면 ViewPager를 사용할 필요가 종종 생겨난다.
ViewPager를 사용할 때 Fragment와 함께 사용하는 경우가 대부분인데, 그럴 때 고민이 되는 것은 Adapter를 어떤 것을 연결해서 사용할 것인가? 이다.
FragmentPagerAdapter 는 FragmentPagerAdapter와 FragmentStatePagerAdapter의 2가지로 나뉜다.

결론부터 말하면 FragmentPagerAdapter와 FragmentStatePagerAdapter 중에 고민이 된다면 FragmentStatePagerAdapter를 쓰세요.

Google Android Developer 사이트를 찾아보면 사전적(?)인 의미는 아래와 같다.

FragmentPagerAdapter

This version of the pager is best for use when there are a handful of typically more static fragments to be paged through, such as a set of tabs. The fragment of each page the user visits will be kept in memory, though its view hierarchy may be destroyed when not visible. This can result in using a significant amount of memory since fragment instances can hold on to an arbitrary amount of state. For larger sets of pages, consider FragmentStatePagerAdapter.

요약해보면 Fragment가 눈에 보이지 않을때 View 계층에서 Destroy 되었을지도 모르는 상황에서도 Fragment 인스턴스가 원하는 만큼이 메모리를 계속 차지하고 있다. 따라서 Page(Fragment)가 많아지면 FragmentStatePagerAdapter를 사용하는 것을 권장한다. FragmentPagerAdapter를 사용하고 싶다면 Fragment가 적게 사용되는 Tab View 에서 사용하는 것이 가장 좋은 사용처가 될 것이다. 이 정도의 의미로 받아들이면 될 것 같다.

FragmentStatePagerAdapter

This version of the pager is more useful when there are a large number of pages, working more like a list view. When pages are not visible to the user, their entire fragment may be destroyed, only keeping the saved state of that fragment. This allows the pager to hold on to much less memory associated with each visited page as compared to FragmentPagerAdapter at the cost of potentially more overhead when switching between pages.

그 다음 이 문장을 설명해보면, Page가 많아지는 경우에 더욱 유용하다고 설명하고 있다. Page(Fragment)가 눈에 보이지 않게 되면, 해당 Fragment는 State를 저장하고 Destroy 되기 때문에 FragmentPagerAdapter와 비교 했을때 훨씬 적은 메모리를 사용하며, Page가 전환될 때 발생하는 오버헤드도 더 많이 감수할 수 있다. 결론은 Android 에서 가장 중요한 메모리를 더 효율적으로 관리하면서 많은 Page(Fragment)를 관리할 수 있다는 것이네요.

안드로이드 앱도 점점 덩치가 커지고, 이미지, 동영상 등등 각종 미디어까지 결합되면서 사용하는 경우가 많기 때문에 메모리를 더 적게 먹으면서 더 많은 객체를 다룰 수 있다는 것은 매우 중요합니다. 물론 하드웨어가 빵빵하면 저런 것들은 신경쓰지 않고 개발해도 되겠지만, 모든 사람들이 플래그쉽 스마트폰을 쓰는 것은 아니기 때문에 자원을 효율적으로 사용하는 앱을 만드는 것은 무조건 옳다고 생각합니다.

728x90