2013-08-26 2 views
0

버튼 클릭 처리기에서 콘텐츠 공급자 (getContentResolver().query(...) 사용)의 일부 데이터를로드 한 다음 네트워크 요청에서 해당 데이터를 전송합니다. 이 접근법으로 메인 쓰레드에서 질의가 발생하기 때문에 이것을 메인 UI 쓰레드로부터 제거하고 싶다.단일 사용 로더

나는 LoaderManager를 사용할 수 있고 네트워크 요청을 onLoadFinished()에서 시작한다고 생각하지만, 문제는 내가 로딩하지 않으려 고하기 때문에 (로더 ID에 대해) onLoadFinished()을 다시 호출하고 싶지 않다는 것입니다. 예를 들어 화면 방향 동안 네트워크 요청을 다시 전송할 수 있습니다.

그래서 한 번만 수행하려는 쿼리에 대해 LoaderManager를 사용하려면 어떻게해야합니까?

답변

0

새로운 Loader를 만들고 새로드를 강제하거나 기존 Loader를 재사용하고 (있는 경우) 가장 최근에 쿼리 데이터를 제공 할 것 중 하나 귀하의 Activity#onCreate() 방법에 LoaderManager#initLoader()를 호출. 따라서 LoaderManager을 올바르게 사용하는 경우 (즉, 개발자 사이트에서 문서에서 권장하는 방식) 아무런 문제가 없어야합니다.

+0

문제는 일단 쿼리의 결과가 한 번만 필요하지만 LoaderManager를 사용하면 여러 번 결과가 반환된다는 것입니다 (화면 회전 또는 활동 재 작성 등). –

0

onLoadFinished()에는 getLoaderManager().destroyLoader(loaderId) (또는 해당하는 경우 getSupportLoaderManager())으로 전화 할 수 있습니다. 그러면 로더가 자동으로 다시로드되지 않습니다. initLoader을 호출하는 곳이 (예 : onSaveInstanceState에 부울 변수를 저장하여) 다시 실행되지 않도록해야 할 수도 있습니다.