gpt4 book ai didi

java - 主服务线程上的 BlockingQueue

转载 作者:行者123 更新时间:2023-11-30 02:44:33 28 4
gpt4 key购买 nike

我的 Android 应用程序有一个长时间运行的后台服务,据我所知,它在应用程序的主线程中运行,因此,任何耗时或阻塞的任务都应移至单独的线程。

现在,情况是这样的,我不明白/困惑:

当我从一个 Activity 绑定(bind)到服务时,我收到一个对该服务的引用,它允许我从我的 Activity 中调用服务方法。其中一种方法允许我将 String 对象从 Activity 传递到服务,然后将其添加到 BlockingQueue。在服务的 onCreate 方法中启动的一个单独的工作线程检查队列中的可用数据,然后执行所需的任务。

我想了解的是,如果在某个时候队列变满并且队列阻塞的尝试,是否会影响运行服务的主线程?

最佳答案

是的。在这种情况下,如果队列已满,调用线程将阻塞(在您的情况下是主线程)。所以这是一个糟糕的设计。

来自 Activity 字段的生成数据不会强制您在主线程上使用它。我建议您为在自己的线程上运行的生产者使用一些 Handler,这将允许您在主线程之外进行处理(并最终在队列中等待)。

这也有利于与您的 Service 通信,因为您可以使用 HandlersService 通信(参见 Android Services' guide )。

最后,如果应用生成的数据可以使用 直接传递给 HandlerHandler.post(Runnable)Handler.send(Message)

关于java - 主服务线程上的 BlockingQueue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25301913/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com