3

我正在使用,它会在查询完成后AsyncQueryHandler调用。onQueryComplete

我的问题:onQueryComplete在 UI 线程上调用?

我知道它在后台进行查询。

在哪里AsyncQueryHandler实例化有关系吗?(如果在 UI 线程中实例化将意味着onQueryComplete将在 UI 线程上调用)。

4

1 回答 1

7

onQueryComplete在 UI 线程上调用?

它在调用线程上被调用......所以你启动AsyncQueryHandler.

在哪里AsyncQueryHandler实例化有关系吗?

AsyncQueryHandlerHandler执行异步查询(或插入、更新、删除)ContentResolver并将结果返回给调用线程的子类。Handlers 允许与主 UI 线程以外的线程相关联,对ContentResolver. 因此,您也应该被允许AsyncQueryHandler从单独的线程调用。

话虽如此,这样做可能不是您想要的,原因如下:

  1. 当您AsyncQueryHandler在单独的线程上实例化时,所有后续回调都将返回到该调用线程。这通常不是您想要的,因为它没有提供与主 UI 线程同步的简单方法,主 UI 线程负责创建布局和接收触摸事件。

  2. 您已经在一个单独的线程上,因此ContentResolver对 UI 线程的调用已经是异步的。

顺便说一句,关于这些点的文档AsyncQueryHandler没有提到任何内容,但是您可以通过阅读源代码来了解大部分内容。(其直接基类)的文档Handler也解释了其背后的理论。

于 2012-07-14T16:42:22.780 回答