在Android上,我有一个普通的消费者 - 制片人场景:
*
* 您建议使用哪种类型的同步和列表?我会这样做而不浪费CPU负载。
我害怕点7 ..我不想阻止很多时间的UI线程
编辑: ,了解@Alex的详细信息
我是用伪代码写的:
Thread C producer : calls EventTracker.trackEvent( C )
UI producer : calls EventTracker.trackEvent( A )
EventTracker
{
BlockingQueue<Event> blockingQueue
trackEvent(Event x)
{
blockingQueue.offer(500, ms);
}
Thread consumer
{
while(true){
Event p = blockingQueue.poll(100, ms);
}
}
}
如果在trackEvent(A)上触发超时,则UI生产者不会等待很长时间但是事件“A”是否错过了?
答案 0 :(得分:1)
您可以通过排队和使用SEDA approach
等实施来解决此问题Blocking queue在您的情况下,生产者通过使用'offer'在队列中插入事件,而消费者通过使用'poll'来获取它们。 (当用户退出应用程序时,在这些方法上使用Timeout很好地退出生产者/消费者)
请注意,使用此方法时,在线程方面有一些问题可以解决。
这是android开发者文档中的example of the concept。