【发布时间】:2014-08-14 21:33:29
【问题描述】:
我的 android 应用程序有一个长时间运行的后台服务,我也知道它在应用程序的主线程中运行,因此,任何耗时或阻塞的任务都应移至单独的线程。
现在,情况是这样,我不明白/感到困惑:
当我从活动绑定到服务时,我会收到对服务的引用,它允许我从活动中调用服务方法。其中一种方法允许我将一个字符串对象从活动传递给服务,然后将其添加到BlockingQueue。在服务的 onCreate 方法中启动的单独工作线程检查队列中的可用数据,然后执行所需的任务。
我想了解的是,如果在某个时候队列变满并且尝试队列阻塞,它会影响服务正在运行的主线程吗?
【问题讨论】:
-
你为什么使用
BlockingQueue?你对制片人有什么要求吗?我的意思是,队列已满和生产者 bean 阻塞的情况是您想要的,还是不想要的副作用? -
将对象添加到队列中很重要。因此,如果队列已满,它应该阻塞,直到有可用空间来添加对象。
-
所以你已经有了一些生产者-消费者模型。为什么生产者首先在主线程上运行?
-
实际数据来自Activity中的字段,通过调用服务实例上的方法,然后将数据对象作为参数传递给服务中的队列。然后该方法将对象添加到消费线程从中获取对象的队列中。
标签: java android multithreading android-service blockingqueue