私は使用しており、クエリが完了するAsyncQueryHandler
と呼び出されます。onQueryComplete
私の質問: onQueryComplete
UI スレッドで呼び出されますか?
バックグラウンドでクエリを実行することはわかっています。
AsyncQueryHandler
インスタンス化された場所は重要ですか?(UI スレッドでインスタンス化された場合は、UI スレッドonQueryComplete
で呼び出されることを意味します)。
私は使用しており、クエリが完了するAsyncQueryHandler
と呼び出されます。onQueryComplete
私の質問: onQueryComplete
UI スレッドで呼び出されますか?
バックグラウンドでクエリを実行することはわかっています。
AsyncQueryHandler
インスタンス化された場所は重要ですか?(UI スレッドでインスタンス化された場合は、UI スレッドonQueryComplete
で呼び出されることを意味します)。
onQueryComplete
UI スレッドで呼び出されますか?
それは呼び出し元のスレッドで呼び出されます...つまり、AsyncQueryHandler
.
AsyncQueryHandler
インスタンス化された場所は重要ですか?
AsyncQueryHandler
Handler
に対して非同期クエリ (または挿入、更新、削除) を実行しContentResolver
、結果を呼び出しスレッドに返す のサブクラスです。Handler
は、メイン UI スレッド以外のスレッドに関連付けることができますContentResolver
。. AsyncQueryHandler
したがって、別のスレッドからの呼び出しも許可する必要があります。
そうは言っても、そうするのは、いくつかの理由から、おそらくあなたが望むものではありません:
を別のスレッドでインスタンス化するAsyncQueryHandler
と、後続のコールバックはすべてその呼び出しスレッドに返されます。これは、メインの UI スレッド (レイアウトの作成とタッチ イベントの受信を担当するスレッド) と同期する簡単な手段を提供しないため、通常は望ましくありません。
既に別のスレッドにいるため、 への呼び出しContentResolver
は UI スレッドに関してすでに非同期になっています。
ちなみに、 のドキュメントでAsyncQueryHandler
はこれらの点については何も言及されていませんが、ソース コードを読めばほとんどのことがわかります。Handler
(直接の基本クラス)のドキュメントでは、その背後にある理論も説明されています。