3

私は使用しており、クエリが完了するAsyncQueryHandlerと呼び出されます。onQueryComplete

私の質問: onQueryCompleteUI スレッドで呼び出されますか?

バックグラウンドでクエリを実行することはわかっています。

AsyncQueryHandlerインスタンス化された場所は重要ですか?(UI スレッドでインスタンス化された場合は、UI スレッドonQueryCompleteで呼び出されることを意味します)。

4

1 に答える 1

7

onQueryCompleteUI スレッドで呼び出されますか?

それは呼び出し元のスレッドで呼び出されます...つまり、AsyncQueryHandler.

AsyncQueryHandlerインスタンス化された場所は重要ですか?

AsyncQueryHandlerHandlerに対して非同期クエリ (または挿入、更新、削除) を実行しContentResolver、結果を呼び出しスレッドに返す のサブクラスです。Handlerは、メイン UI スレッド以外のスレッドに関連付けることができますContentResolver。. AsyncQueryHandlerしたがって、別のスレッドからの呼び出しも許可する必要があります。

そうは言っても、そうするのは、いくつかの理由から、おそらくあなたが望むものではありません:

  1. を別のスレッドでインスタンス化するAsyncQueryHandlerと、後続のコールバックはすべてその呼び出しスレッドに返されます。これは、メインの UI スレッド (レイアウトの作成とタッチ イベントの受信を担当するスレッド) と同期する簡単な手段を提供しないため、通常は望ましくありません。

  2. 既に別のスレッドにいるため、 への呼び出しContentResolverは UI スレッドに関してすでに非同期になっています。

ちなみに、 のドキュメントでAsyncQueryHandlerはこれらの点については何も言及されていませんが、ソース コードを読めばほとんどのことがわかります。Handler(直接の基本クラス)のドキュメントでは、その背後にある理論も説明されています。

于 2012-07-14T16:42:22.780 に答える