코딩 (독학)/★ Kotlin

[Ch.★] FragmentStatePagerAdapter 프래그먼트 스테이트 페이저 어댑터? (Android Studio with Kotlin) _ Fragment 인식 관련

짱득이 2022. 2. 5. 20:38
300x250
반응형

🧠 무엇인가?

1. FragmentPagerAdapter

 - 모든 Fragment에 대한 상태를 저장하고 있는 놈임

 - 고정된 수의 Page를 운영하는데 적합하나, 적절히 관리하지 않으면 메모리 누수가 일어나기 쉬움. (Activity가 종료되지 않으면 제거하지 않기 때문)

 - onDestroyView와 onCreateView가 호출됨.

 - 현재 보이지 않는 Fragment에서 View들을 Detach 함.

=> viewPager에서 좌, 우 화면전환을 하여 다음 Fragment가 표시되면 이전 Fragment를 메모리 상에 저장하면서, 사용자가 화면을 반대로 사용하면 메모리상에 저장되어 있는 Fragment를 사용하게 됨.

 

2. FragmentStatePagerAdapter

 - cache(default = 3)되는 양 옆의 Fragment들을 뺀 나머지 Fragment들이 완전히 파괴되고, State(savedInstanceState)만 저장되어 필요할 때 다시 객체화가 되는 과정을 거침.

 - 메모리 관리에 좀 더 적합하며, 내부에 저장됨.

 - 범위 밖의 Fragment Instance를 FragmentManager에서 완전 제거함.

 - Page 개수가 미정인 List나 항목이 자주 변경되는 List에 적합함.

 => FragmentStatePagerAdapter는 ViewPager의 페이지를 이동하여 다음 Fragment가 표시되면 이전 Fragment는 메모리 상에서 제거된다. 만약 사용자가 화면을 반대로 전환하면 기존에 저장된 상태값을 기반으로 재 생성한다. 따라서 페이지 수를 알 수 없거나 많다면 Fragment를 완전히 FragmentManager에서 제거하는 FragmentStatePagerAdapter를 사용하는것이 좋다.

 

요약하면, 아래와 같다.

페이지 수가 정해져 있고 그 수가 많지 않다. (정적인 편에 가까울 때) => FragmentPagerAdapter

페이지 수를 알 수 없고 그 수가 많을 때. (동적인 편에 가까울 때) => FragmentStatePagerAdapter

 

다만, ...Adapter를 사용할 때 주의해야 할 점은 기존 방법(Deprecated)를 사용하면 안된다는 것이다.

 

기존 방법(Deprecated 된 방법)

setUserVisibleHint(isVisibleToUser : Boolean) method를 오버라이드 해서 사용하였음.

 

새로운 방법

...Adapter 생성자 부분에 2번째 파라미터가 생겼다.1. BEHAVIOR_SET_USER_VISIBLE_HINT

2. BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT

원래는 위 2가지 파라미터가 생겼는데, 1번은 Deprecated 되어 2번을 사용하기를 권장한다.

사용 형식, 방법
사용 형식, 방법

 

728x90
반응형