2013-03-14 1 views
0

서비스에 대한 구성 데이터를 보유하고있는 테이블을 업데이트하는 활동이 있습니다. SimpleCursorLoader 및 SupportLoaderManager를 사용하여 해당 활동의 목록보기를 업데이트합니다. In the activity의 onDestroy에서 로더를 파괴합니다. 이 활동을 방문하지 않아도 내가보고있는 문제가 발생하므로 관련성이 없을 수 있습니다.ContentResolver.notifyChange 호출자 찾기

위의 활동에서 수정 된 테이블의 URI에 ContentObserver를 등록하는 서비스도 있습니다. 구성을 읽고 자체를 설정하고 해당 테이블에 ContentObserver를 서비스 onCreate에 등록합니다. 서비스의 onDestroy에서 해당 청취자는 등록이 취소됩니다.

이것은 시스템에있는 데이터베이스/테이블 중 일부에 불과합니다. 내가보기에는 완전히 다른 테이블을 업데이트하면이 구성 URI의 ContentObserver가 트리거됩니다. 당국은 완전히 다른데, 다른 SqlLite 데이터베이스와 상호 작용하며, 응용 프로그램 내 다른 프로세스에서도 실행됩니다. ContentObservers를 트리거하는 찾을 수있는 모든 "notifyChange"호출을 제거했지만 아직 실행 중입니다.

내 질문은 ContentObserver가 실행되도록하는 notifyChange를 호출하는 사람을 찾는 방법이 있습니까? 내 응용 프로그램 외부의 시스템이 관찰자에게 URI를 알릴만한 이유가 있습니까? 나는 그것을 추적하려고 노력하고있다. 그러나 통지가 어디서 오는 것인지 아무런 단서도없이, 나는 벽에 뛰어 들어있다.

답변

0

다시 답변을 몇 시간 만 있습니다. 나는 분명히 내 코드에서 모든 notifyChange 호출을 찾지 못했다. 가해자는 다음과 같습니다.

getContentResolver.notifyChange(new Uri.Builder().build(), null); 

빈 Uri에서 알림을 호출했습니다. 문서에 언급 된 것처럼 보이지는 않지만, 내가 본 동작은 등록 된 ContentObserver가 모두 내 애플리케이션에서 실행되도록 트리거 한 것입니다. 나는 거기에서 그 라인을 꺼내었고, 이제는 모든 것이 알려주고 있습니다.

"원래 Uri에서 notifyChange를 호출 한 사람을 찾는 방법이 있습니까?"대답은 "코드에서 notifyChange 호출이 더 어려워 보입니다. 그 외, 너 혼자만. "