2014-06-08 2 views
4

에 데이터를 제공하는 CursorLoader이 있습니다.활동이 일시 중지되면 CursorLoader가 취소됨

cursor.setNotificationUri(getContext().getContentResolver(), uri); 

getContext().getContentResolver().notifyChange(uri, null) 

내가 목록 항목을 선택

는, 새로운 아이 Activity이 열리고 난을이 ActivityonCreate()에 : 나는 알림 메커니즘을 제대로 내 ContentProvider에서 구성한 항목 세부 정보를 수정하는 쿼리입니다.

나는 통지 해고 알고와는 CursorLoader 콘텐츠 공급자를 다시 쿼리합니다.

내가 직면 해요 문제가 있음을 때때로 내 부모 Activity가 일시 중지 (또는 정지)와 onLoadFinished() 호출 결코 극복되고 있기 때문에 CursorLoader이 취소됩니다. 내가 지원 라이브러리 V4를 사용하고

@Override 
public void onResume() { 
    super.onResume(); 
    getLoaderManager().initLoader(URL_LOADER, null, this); 
} 

다음 CursorLoader가 취소되면

, 나는 경우에도 ListFragment의 로더 onResume()를 다시 초기화하기, 나는 데이터의 변화를 볼 수 없습니다. 이 배경에 경우에도 내가 CursorLoader 있으리라 믿고있어

부모 Activity을 업데이트합니다. ListFragment이 다시 시작될 때 로더를 다시 시작해야합니까?

(편집) 내가 작성 및 ListFragment에서 로더를 시작하고 있음을 언급하는 것을 잊었다

.

는 디버깅 후에, I는 ListFragment 정지시 로더 매니저 단편 모든 전류 로더 취소하였습니다. 내 경우

는 새 자식 활동이 생성 될 때, DB를 변경 로더가 다시 쿼리를 수행하게 알림을 트리거합니다. 상위 조각이 중지되기 전에 쿼리가 완료되지 않으면 로더가 취소되고 이전 커서는 여전히 유효합니다. 하위 활동의 ​​ListFragment이있는 상위 활동으로 다시 돌아 가면 표시된 데이터는 이전 커서의 데이터입니다. 이 경우 알림이 손실되고 로더 onResume()을 다시 시작해야합니다.

하위 작업이 시작된 후 10 초 후에 만 ​​db를 수정 한 테스트를 수행했으며 (부모 작업이 이미 중지 되었기 때문에) 로더가 취소되지 않았기 때문에 부모 작업으로 돌아갈 때 새 커서가 수신되었습니다. .

아무도 나를 강제 재 쿼리 (restartCursor()) 부모 활동이 재개 모든 시간을 포함하지 않는 해결책을 찾을 도와 드릴까요?

+0

언제 .notifyChange를 호출합니까? – pskink

+0

ListProject의 항목을 변경하면 ContentProvider에서 @pskink가 발생합니다. 이것은 onCreate()에서 자식 활동에서 발생합니다. –

+0

커서 커서 어댑터에서 사용중인 플래그는 무엇입니까? 동일한 메커니즘을 사용 중이며 알림이 손실되지 않습니다. – pskink

답변

0

지원 라이브러리를 사용하는 경우 getLoaderManager() 대신 getSupportLoaderManager()을 사용해야하지만 FragmentActivity에서만 가져올 수 있습니다. 이 코드를 대신 사용해보십시오 :

getActivity().getSupportLoaderManager().initLoader(id, null, this); 
+0

이 방법을 시도했지만 동작은 동일합니다. 하위 활동이 시작되면 로더가 취소됩니다. –

+0

Activity마다 하나의 LoaderManager 만 있고 LoaderManager는 작성자가 작성하는 구성 요소의 수명주기와 관련이 있으므로, 수행하려는 작업이 활동간에 로더를 공유하는 경우 수행 할 수 없습니다. – ILovemyPoncho