コンテンツリゾルバを使用してコンテンツプロバイダからデータを取得しようとしています。私はスレッドでこれを行い、連続して新しいデータを(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();
}
}
}
(runメソッドは、メインUIスレッドから起動したスレッドの一部です)。
クエリが初めて実行されたとき、通常の操作のように思えるほどの時間(多分数ミリ秒)はブロックされません。それ以降の時間問合せが呼び出されると、それは正確に30秒間ブロックされます。
なぜ最初にすぐに実行されるのかわかりません。その後、毎回30秒間ブロックします。
誰も私がこの動作を見ている理由についていくつかの光を当てることができますか?
おかげ
EDIT:30秒は、新しいものをリリースする前にカーソルをクリーンアップするための理由が見つかりましたが、コンテンツプロバイダが待っていました。
まず、別のURIを使用してみてくださいです。問題が解決しない場合は、特定のコンテンツプロバイダの特定の動作です。 – inazaruk
コンテンツオブザーバを使用します。変更をポーリングしない – CommonsWare
コンテンツオブザーバを調べます。コンテンツオブザーバーの使い方に関する良いチュートリアルへのリンクがありますか? – harbinja