2014-08-31 66 views
0

请问您的建议,我是Android编程新手。Android:让线程在AlarmBroarcastReceiver中一个一个排队排队

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

公共类AlarmManagerBroadcastReceiver扩展广播接收器{

public void onReceive(Context context, Intent intent) { 

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

}

有时我的应用程序面临在多个广播都在同一时间的情况。 这会导致多个线程在同一时间执行, 我不想发生这种情况,因为这会干扰有用的代码。

我想让线程进入队列并一个接一个地运行。 如果您之前遇到过这种情况,请您如此善意的提供建议,有没有什么办法可以做到这一点?

据我所知,问题在于我让Executors。 newSingleThreadExecutor()每当广播出现时,创建新的执行程序,并且线程不会进入旧队列队列,而是进入新队列,因此它们再次同时运行。

回答

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 
    } 
} 
+0

它的工作!谢谢你,我想我还有很多东西需要学习,因为我不完全明白它为什么起作用。再次感谢你,祝你有美好的一天。 – lxs 2014-08-31 17:02:15

+0

我已经测试了一段时间,但不幸的是它不知道它总是工作。只要我在应用程序 - 它工作正常。但是当我关闭应用程序并等待闹钟时间到来时,多个闹钟同时发出,并且它们仍然根据我的日志记录同时运行。 – lxs 2014-08-31 17:13:36

+0

我已经解决了这个使用应用程序服务,在服务类的构造函数中使用executor声明。然后我将来自alarmbroadcastreceiver的数据传递给排队和执行线程的服务。谢谢chiastic-security – lxs 2014-09-01 15:57:38