主服务线程上的BlockingQueue

时间:2014-08-14 07:00:12

标签: java android multithreading android-service blockingqueue

我的Android应用程序有一个长期运行的后台服务,我也理解在应用程序的主线程中运行,因此,任何耗时或阻塞任务都应该移动到一个单独的线程。

现在,情况如此,我不明白/困惑:

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

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

1 个答案:

答案 0 :(得分:1)

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

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

这也适用于与Service进行通信,因为您可以使用HandlersService进行通信(请参阅Android Services' guide)。

最后,如果应用生成的数据可以使用Handler Handler.post(Runnable)

直接传递给Handler.send(Message)