我正在尝试使用内容解析程序从内容提供商处获取数据。我正在尝试在一个线程中执行此操作并不断查询新数据(每5秒钟左右)。
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();
}
}
}
(run方法是我从主UI线程启动的Thread的一部分)。
第一次执行查询时,它似乎没有阻塞任何大量的时间(可能是几毫秒),这在我看来就像一个正常的操作。每次调用后续查询时,它都会完全阻塞30秒。
我不知道为什么它会在第一次立即执行,然后每隔一段时间阻止30秒。
任何人都可以解释为什么我可能会看到这种行为?
由于
编辑:找到原因,内容提供商在发布新光标之前等待30秒来清理光标。
答案 0 :(得分:0)
你绝对应该使用TimerTask来实现“休眠”,而不是无限循环并调用Thread.sleep()。
Thread.sleep()非常非常丑陋,通常会让你遇到麻烦..