0

请征求您的意见,我是 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()每次广播出现时,都会创建新的执行程序,线程不会进入旧队列,而是进入新队列,因此它们再次同时运行。

4

1 回答 1

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
    }
}
于 2014-08-31T16:09:23.053 回答