Android中的消费者 - 生产者模式,一些提高绩效的建议?

时间:2016-09-24 13:58:22

标签: java android multithreading performance producer-consumer

在Android上,我有一个普通的消费者 - 制片人场景:

  1. 不同的生产者线程可以在列表中添加对象 不同的时间
  2. 当某个事件(Trigger事件)出现时 消费者开始从列表中保留元素(只有一个 线程消费者。
  3. 当列表为空时,消费者会停止 保留列表中的元素
  4. 一旦列表不是空的 消费者必须从列表中记录元素
  5. 消费者必须 只要它插入列表中的元素,就可以快速保存数据 来自生产者的消费者必须保留它
  6. 我有这个 单例中的场景,我只能在应用程序时停止线程 关机。
  7. *

    1. 其中一个制作人有时是UI线程
    2. * 您建议使用哪种类型的同步和列表?我会这样做而不浪费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”是否错过了?

1 个答案:

答案 0 :(得分:1)

您可以通过排队和使用SEDA approach

等实施来解决此问题Blocking queue

在您的情况下,生产者通过使用'offer'在队列中插入事件,而消费者通过使用'poll'来获取它们。 (当用户退出应用程序时,在这些方法上使用Timeout很好地退出生产者/消费者)

请注意,使用此方法时,在线程方面有一些问题可以解决。

这是android开发者文档中的example of the concept