请咨询您的建议,我是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()因此创建了新的执行器,并且线程不在旧的队列中,但是到新队列,所以他们再次同时运行。
答案 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
}
}