콘텐츠 리졸버를 사용하여 콘텐츠 공급자로부터 데이터를 가져 오려고합니다. 스레드에서이 작업을 수행하고 새 데이터 (매 5 초마다)를 계속 쿼리하려고합니다.ContentResolver 쿼리 함수 블록
public void run()
{
while (!this.cancelled)
{
// get the cursor to all the msgs
Cursor cur = this.mContentResolver.query(MY_URI, null, null, null, null);
.... // iterate through cursor, store some data, etc. (quick process)
// sleep the thread for a bit before we query again
try
{
Thread.sleep(5000); // sleep for 5 seconds
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
(실행 방법은 내 기본 UI 스레드에서 실행 한 내 스레드의 일부입니다.)
처음 쿼리를 실행하면 상당한 시간 (어쩌면 몇 밀리 초) 동안 차단되지 않는 것처럼 보입니다. 정상적인 작동처럼 보입니다. 이후의 모든 쿼리가 호출되고 정확히 30 초 동안 차단됩니다.
왜 처음에는 즉시 실행되고 이후의 모든 시간에는 30 초 동안 차단되는지 알 수 없습니다.
내가이 동작을하는 이유는 무엇일까?
감사
편집 : 30 초 새를 해제하기 전에 커서를 정리하는 컨텐츠 공급자가 기다리고 있었다, 이유를 발견.
먼저, 다른 URI를 사용하려고합니다. 문제가 계속되면 코드에서 문제가 될 수 있습니다. 문제가 해결되지 않으면 해당 특정 콘텐츠 공급자의 특정 동작입니다. – inazaruk
콘텐츠 옵저버를 사용합니다. 변경 사항을 폴링하지 마십시오. – CommonsWare
콘텐츠 관찰자를 살펴 보겠습니다. 콘텐츠 옵저버 사용 방법에 대한 좋은 자습서 링크가 있습니까? – harbinja