에 데이터를 제공하는 CursorLoader
이 있습니다.활동이 일시 중지되면 CursorLoader가 취소됨
cursor.setNotificationUri(getContext().getContentResolver(), uri);
및
getContext().getContentResolver().notifyChange(uri, null)
내가 목록 항목을 선택
는, 새로운 아이Activity
이 열리고 난을이
Activity
의
onCreate()
에 : 나는 알림 메커니즘을 제대로 내
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()
) 부모 활동이 재개 모든 시간을 포함하지 않는 해결책을 찾을 도와 드릴까요?
언제 .notifyChange를 호출합니까? – pskink
ListProject의 항목을 변경하면 ContentProvider에서 @pskink가 발생합니다. 이것은 onCreate()에서 자식 활동에서 발생합니다. –
커서 커서 어댑터에서 사용중인 플래그는 무엇입니까? 동일한 메커니즘을 사용 중이며 알림이 손실되지 않습니다. – pskink