我的Android应用程序有一个长期运行的后台服务,我也理解在应用程序的主线程中运行,因此,任何耗时或阻塞任务都应该移动到一个单独的线程。
现在,情况如此,我不明白/困惑:
当我从活动绑定到服务时,我会收到对该服务的引用,该引用允许我从我的活动中调用服务方法。其中一种方法允许我将String对象从活动传递给服务,然后将其添加到BlockingQueue
。在Service的onCreate方法中启动的单独工作线程会检查队列中的可用数据,然后执行所需的任务。
我想要理解的是,如果在某个时刻,队列变满并且尝试队列阻塞,它是否会影响服务运行的主线程?
答案 0 :(得分:1)
是。在这种情况下,如果队列变满,则调用线程将阻塞(在您的情况下,主线程)。所以这是一个糟糕的设计。
来自Activity
字段的生成数据不会强制您在主线程上使用它。我建议你在自己的线程上运行一些Handler
生成器,它允许你在主线程之外进行处理(并最终在队列上等待)。
这也适用于与Service
进行通信,因为您可以使用Handlers
与Service
进行通信(请参阅Android Services' guide)。
最后,如果应用生成的数据可以使用Handler
或
Handler.post(Runnable)
Handler.send(Message)