ContentResolver查询功能块

时间:2011-11-11 20:48:04

标签: java android

我正在尝试使用内容解析程序从内容提供商处获取数据。我正在尝试在一个线程中执行此操作并不断查询新数据(每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秒来清理光标。

1 个答案:

答案 0 :(得分:0)

你绝对应该使用TimerTask来实现“休眠”,而不是无限循环并调用Thread.sleep()。

Thread.sleep()非常非常丑陋,通常会让你遇到麻烦..