我的android应用程序有一个长期运行的后台服务,我也理解在应用程序的主线程中运行,因此,任何耗时或阻塞的任务都应该移动到一个单独的线程中。
现在,情况是这样的,我不明白/不明白:
当我从一个活动绑定到服务时,我收到一个对服务的引用,它允许我从我的活动中调用服务方法。其中一种方法允许我将字符串对象从活动传递到服务,然后将服务添加到BlockingQueue中。在服务的onCreate方法中启动的一个单独的工作线程检查队列中的可用数据,然后执行所需的任务。
我想要了解的是,如果在某一时刻,队列变得满,并且尝试队列块,它会影响服务运行的主线程吗?
发布于 2014-08-14 13:33:29
是。在这种情况下,如果队列已满,则调用线程将阻塞(在您的情况下是主线程)。所以这是个糟糕的设计。
来自Activity字段的生成数据并不强迫您在主线程上使用它。我建议您为在自己的线程上运行的生产者使用一些Handler,这将允许您在主线程之外进行处理(并最终等待队列)。
这也有利于与Service通信,因为您可以使用Handlers与Service通信(参见Android服务指南)。
最后,如果应用生成的数据可以使用Handler或Handler.post(Runnable)直接传递给Handler.send(Message)
https://stackoverflow.com/questions/25301913
复制相似问题