异步查询处理程序在UI线程上调用onQueryComplete吗?(Android)

3

我正在使用AsyncQueryHandler,一旦查询完成,它将调用onQueryComplete

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

我知道它会在后台执行查询。

AsyncQueryHandler实例化的位置是否重要?(如果在UI线程中实例化,则意味着onQueryComplete将在UI线程上调用)。

1个回答

7

onQueryComplete 在 UI 线程上调用吗?

它是在 调用 线程上调用的... 所以是在启动 AsyncQueryHandler 的线程上。

实例化 AsyncQueryHandler 的位置有关系吗?

AsyncQueryHandlerHandler 的子类,执行异步查询(或插入、更新、删除)到 ContentResolver 并将结果返回给调用线程。 Handler 允许与主 UI 线程之外的其他线程相关联,因此对 ContentResolver 的查询/事务也是如此。因此,您应该允许从单独的线程调用 AsyncQueryHandler

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

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接