Android:让线程在AlarmBroarcastReceiver中逐个排队

时间:2014-08-31 16:07:15

标签: android multithreading alarmmanager runnable executors

请咨询您的建议,我是Android编程的新手。

我正在编写类似闹钟的软件,并使用公共类AlarmManagerBroadcastReceiver扩展BroadcastReceiver 捕获AlarmManager之前设置的警报。
为了不中断UI我在这个类的public void onReceive(Context context,Intent intent)中使用新线程。 通常它看起来像这样:

公共类AlarmManagerBroadcastReceiver扩展了BroadcastReceiver {

 public void onReceive(Context context, Intent intent) {

        Executors.newSingleThreadExecutor().submit(new Runnable() {
                  public void run() { 
                          ... //useful code
        }
 }

}

有时我的应用会遇到多个广播同时出现的情况。 这导致多个线程同时执行, 我不想发生这种情况,因为它会扰乱有用的代码。

我希望线程进入队列并一个接一个地运行。 如果你之前遇到过这种情况,请你如此善意地提出建议,我有什么方法可以做到这一点吗?

据我所知,问题在于我每次播出时都会创建执行者。 newSingleThreadExecutor()因此创建了新的执行器,并且线程不在旧的队列中,但是到新队列,所以他们再次同时运行。

1 个答案:

答案 0 :(得分:0)

在构造函数中创建SingleThreadExecutor;然后,在onReceive中,将新的Runnable传递给您已经拥有的SingleThreadExecutor

public class AlarmManagerBroadcastReceiver extends BroadcastReceiver {

  private ExecutorService executor;

  public AlarmManagerBroadcastReceiver {
    executor = Executors.newSingleThreadExecutor();
  }

  public void onReceive(Context context, Intent intent) {

    executor.submit(new Runnable() {
              public void run() { 
                      ... //useful code
    }
}