我正在使用AsyncQueryHandler
,一旦查询完成,它就会调用onQueryComplete
。
我的问题是:onQueryComplete
是在UI线程上调用的吗?
我知道它在后台进行查询。
AsyncQueryHandler
在哪里实例化有关系吗?(如果在UI线程中实例化,则意味着onQueryComplete
将在UI线程上调用)。
是否在UI线程上调用了
onQueryComplete
?
它是在调用线程上调用的。。。因此,您启动AsyncQueryHandler
的线程。
AsyncQueryHandler
在哪里实例化有关系吗?
AsyncQueryHandler
是Handler
的一个子类,它对ContentResolver
执行异步查询(或插入、更新、删除),并将结果返回给调用线程。Handler
被允许与主UI线程以外的线程相关联,对ContentResolver
的查询/事务也是如此。因此,您也应该被允许从一个单独的线程调用AsyncQueryHandler
。
话虽如此,这样做可能不是你想要的,原因有两个:
-
当您在一个单独的线程上实例化
AsyncQueryHandler
时,所有后续回调都将返回到该调用线程。这通常不是你想要的,因为它没有提供与主UI线程同步的简单方法,主UI线程负责创建布局和接收触摸事件。 -
您已经在一个单独的线程上,因此对
ContentResolver
的调用将已经相对于UI线程异步。
顺便说一句,关于AsyncQueryHandler
的文档没有提到任何关于这些点的内容,但您可以通过阅读源代码来了解其中的大部分内容。Handler
(它的直接基类)的文档也解释了它背后的理论。