로더는 발리 요청을 포함하여 거의 모든 것을 캡슐화 할 수 있습니다. 로더가 이미 배경 작업을 처리하고 Volley와 같은 기본 스레드에서 다시 호출하는 프레임 워크를 캡슐화 할 때 로더 구현은 AsyncTaskLoader
에서 상속하지 말고 간단히 Loader
기본 클래스에서 상속합니다. 그런 다음 onForceLoad()
메소드에서 발리 요청을 시작합니다.
로더가 콜백을 통해 메인 스레드에서 결과를 얻으면 deliverResult()
을 호출하여 Activity/Fragment로 푸시해야합니다.
로더는 진행중인 발리 요청에 대한 참조를 유지해야 onStopLoading()
에서 취소 할 수 있습니다. onStopLoading()은 화면 회전과 같은 구성 변경이있을 때만 호출되며 Activity를 벗어날 때만 호출됩니다.
유일한 단점은 로더에는 오류를 전파하는 기본 제공 메커니즘이 없으며 발리는 그렇지 않습니다. 따라서 로더 내부의 Volley 오류 콜백에서 null 결과를 제공하거나 로컬 브로드 캐스트를 보내어 Activity/Fragment에 오류를 알릴 필요가 있습니다.
나는 사용자가 로딩하는 동안 장치를 회전하는 상황에 대해 생각했다. Volley 프레임 워크의 일반적인 동작은 방향 변경이 완료되면 요청을 취소하고 다시 시작하는 것입니다. 로더 패턴을 사용하면 방향 변경에서로드 상태를 보호 할 수 있습니다. – husrevo
예. 당신이 올바른지.보류중인 요청에 "다시 연결"하거나 "계속 실행"하고 오리엔테이션 변경/활동 중지 - 이력서에 대한 응답을 얻을 수있는 직접적인 의미는 없습니다. –
푸시 알림이 표시되기 전에 푸시 알림에 대한 추가 정보를로드하는 것과 같은 상황에서는 백그라운드 스레드에서이 이벤트를 호출하는 것이 좋습니다. 그러나 일반적인 목적을 위해 주 스레드에서 호출하는 것이 좋습니다. – Gabriel