티스토리 뷰

반응형
SMALL

Fragment 를 사용 하는 PagerAdpater 의 종류 FragmentPagerAdapter, FragmentStatePagerAdapter

 

Fragment LifeCycle

[만들어질 때]

onAttach → onCreate → onCreateView → onViewCreated → onActivityCreated → onResume

 

[없어질 때]

onPause → onDestroyView onDestroy onDetach

 

 

각각 10 페이지를 가지고 있는 FragmentPagerAdapter 와 FragmentStatePagerAdapter 의 Log를 통해 LifeCycler 확인함.

 

 

FragmentPagerAdapter ( 앞에 [0] 은 페이지 번호 )

0번 페이지만 봤을 때의 LifeCycle
전체 포지션에서 바라봤을 때 Swiping..
한바퀴 ( 0 -> 9 갔다가 다시 9 -> 0 으로 돌아왔을 때 )

 

 

반응형

 

 

 

 

FragmentStatePagerAdapter ( 앞에 [0] 은 페이지 번호 )

0번 페이지만 봤을 때의 LifeCycle
전체 포지션에서 바라봤을 때 Swiping..
한바퀴 ( 0 -> 9 갔다가 다시 9 -> 0 으로 돌아왔을 때 )

 

 

 

결과적으로 ( 여기서부터 개인적인 소견 )

FragmentPagerAdapter는 View까지만 삭제하고, FragmentManager가 Fragment는 들고 있다고 생각 할 수 있음. ( View 만 다시 그리는 느낌? )

 

FragmentStatePagerAdapter 

FragmentStatePagerAdapter는 View 뿐만 아니라 Fragment 자체를 날려 버림.

 

어떤 것이 더 좋다라는 것 보다는 

사용 용도에 따라 이 둘의 퍼포먼스는 달라질 것으로 보인다.

간단하게 예를들면 Fragment 자체에 로드가 많을 경우 ( 부하가 클 경우 ? ) Fragment 자체를 날려 버리면 Fragment 를 생성하고 View를 그려야 하는 부하가 생길 수도 있고,

 

앱 자체는 가벼워 지겠지만, 순간 적인 부하가 크지 않을까 ..  

 

 

.

.

.

.

.

 

 

 

근데 ??????

만약에 FragmentPagerAdapter 에서 

destroyItem 으로 Fragment 를 삭제 해주는 로직을 추가하면 어떤 차이가 있는가 ? 

@Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        super.destroyItem(container, position, object);
        IndexFragment cf = (IndexFragment) object;
        mFragMan.beginTransaction().remove(cf).commit();	// FragmentManager
    }

FragmentPagerAdapter 에 destroyItem 으로 Fragment 삭제 하는 로직을 추가

 

이렇게 하면 ? FragmentStatePagerAdapter 와 똑같아 진다?

 

딱 보아하니 FragmentPagerAdapter 의 문제점이라고 생각하는 사람들이 저렇게 destoryItem 을 Override 하여 Fragment 를 삭제하는 로직을 사용 하다가 

FragmentStatePagerAdapter 가 위에 있는 로직을 대체 하여 편하게 사용하라고 만들어 준 것인가 .. 

 

Sample Example Github

반응형
LIST
댓글