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