Android 에서 ViewPager 를 사용 하여 Fragment 를 빠르게 전환 할 때 멈 추 는 최적화 방안

ViewPager 가 현재 Fragment 로 전환 할 때 Fragment 는 레이아웃 을 불 러 오고 내용 을 표시 합 니 다.사용자 가 이때 ViewPager 를 빠르게 전환 하면 Fragment 는 UI 내용 을 불 러 오고 Fragment 를 자주 전환 해 야 하기 때문에 끊 기 는 현상 이 발생 하기 쉽 습 니 다(ListView 가 빠르게 미 끄 러 지 는 동시에 그림 을 불 러 오 면 끊 기기 쉽 습 니 다).
최적화 방안:
1.Fragment 경 량 화
ViewPager 가 불 러 온 Fragment 가 비교적 가 벼 우 면 Fragment 의 구 조 를 적당 하 게 간소화 하고 Fragment 가 불 러 오 는 속 도 를 높 여 카드 가 걸 리 는 현상 을 늦 출 수 있 습 니 다.
2.Fragment 소각 방지
ViewPager 는 전환 할 때 Fragment 를 자주 폐기 하고 불 러 오 면 쉽게 끊 기 는 현상 이 발생 하고 Fragment 의 폐 기 를 막 으 면 끊 기 는 현상 을 효과적으로 늦 출 수 있다.
(1)PagerAdapter 에 destroy Item 을 덮어 쓰 는 방법 은 Fragment 폐 기 를 막 을 수 있 습 니 다.

@Override    
public void destroyItem(ViewGroup container, int position, Object object) {      
    //super.destroyItem(container, position, object);    
}
(2)PagerAdapter 의 setOffscreenPageLimit()방법 을 통 해 몇 개의 Fragment 를 보존 하 는 것 을 설정 할 수 있 습 니 다.파 라 메 터 를 적당 하 게 확대 하면 Fragment 가 자주 소각 되 고 생 성 되 는 것 을 방지 할 수 있 습 니 다.
위험:Fragment 가 비교적 많은 상황 에서 일부 저급 모델 은 OOM 문제 가 발생 하기 쉽다.
3.Fragment 내용 로드 지연
(1)설명
현재 Fragment 로 전환 할 때 Fragment 의 내용 을 바로 불 러 오지 않 고 간단 한 빈 레이아웃 을 불 러 온 다음 지연 작업 을 시작 합 니 다.지연 시간 은 T 입 니 다.사용자 가 이 Fragment 에 머 무 는 시간 이 T 를 초과 할 때 로드 작업 을 계속 수행 합 니 다.사용자 가 다른 Fragment 로 전환 하면 체류 시간 이 T 보다 적 으 면 이 지연 작업 을 취소 합 니 다.
(2)구체 적 인 조작
우선 지연 작업 설정

private Runnable LOAD_DATA = new Runnable() {    
    @Override    
    public void run() {      
     //          Fragment     
    }  
};
시작 작업

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
  //     ,              ,          
  initView();
  //    ,    500           handler.postDelayed(LOAD_DATA,500)
  return view;
}
사용자 가 다른 Fragment 로 전환 하면 작업 을 취소 합 니 다.

//  Fragment         
@Override  
public void setUserVisibleHint(boolean isVisibleToUser) {    
  super.setUserVisibleHint(isVisibleToUser);    
    if(!isVisibleToUser)        
      mHandler.removeCallbacks(LOAD_DATA);
}
(3)주의
setUserVisible Hint 를 사용 하여 사용자 가 다른 Fragment 로 전환 할 지 여 부 를 판단 합 니 다.이러한 방법 은 결함 이 있 습 니 다.ViewPager 가 미 끄 러 지기 시작 할 때 지연 작업 을 취소 하고 미끄럼 오프셋 이 부족 한 상황 에서 ViewPager 는 현재 Fragment 로 계속 스크롤 하여 현재 Fragment 의 로드 작업 이 취소 되 고 로드 작업 을 다시 시작 하지 않 습 니 다.
여기 서 제 가 사용 하 는 방법 은 ViewPager 에 OnPageChange Listener 를 추가 하 는 것 입 니 다.이 모니터 의 onPageSelected(position)는 ViewPager 가 현재 어느 Fragment 로 전환 하 는 지 감청 할 수 있 습 니 다.여기 서 다른 Fragment 의 지연 로드 작업 을 취소 합 니 다.
총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.더 많은 내용 을 알 고 싶다 면 아래 링크 를 보 세 요.

좋은 웹페이지 즐겨찾기