Просьба просить совета, я новичок в программировании на Android.Android: Делайте потоки поочередно поочередно в AlarmBroarcastReceiver
Я пишу программу, напоминающую будильник, и использую открытый класс AlarmManagerBroadcastReceiver расширяет BroadcastReceiver , чтобы поймать тревоги, установленные ранее AlarmManager.
Чтобы не прерывать пользовательский интерфейс, я использую новый поток в public void onReceive (контекст контекста, намерение намерения) этого класса. Обычно это выглядит следующим образом:
общественного класса AlarmManagerBroadcastReceiver расширяет BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
Executors.newSingleThreadExecutor().submit(new Runnable() {
public void run() {
... //useful code
}
}
}
Иногда мое приложение сталкивается с ситуациями, когда несколько передач приходят одновременно. Это вызывает одновременное выполнение нескольких потоков в то же время, , который я не хочу, потому что это нарушает полезный код.
Я хочу, чтобы потоки вошли в очередь и запускались один за другим. Не могли бы вы быть любезны советом, если вы столкнулись с этим раньше, есть ли способ, которым я могу это сделать?
Насколько я понимаю, проблема заключается в том, что я делаю Исполнителей. newSingleThreadExecutor() всякий раз, когда появляется трансляция, поэтому создается новый исполнитель, и поток приходит не в очередь старого, а в новую очередь, поэтому они снова запускаются одновременно.
Это работает! Спасибо, человек, я думаю, у меня есть чему поучиться, но я не совсем понимаю, почему он работает. еще раз благодарю вас и у вас отличный день. – lxs
Я протестировал его некоторое время, но, к сожалению, он как-то не всегда работает. пока я в приложении - он работает нормально. но когда я закрываю приложение и жду времени будильника, одновременно появляется несколько аварийных сигналов, и они все еще работают одновременно в соответствии с моими регистрационными записями. – lxs
Я разрешил это с помощью службы приложений, которая использовала декларацию исполнителя в конструкторе класса сервиса. то я передаю данные от alarmbroadcastreceiver для обслуживания очереди и выполнения потоков. Благодарим вас за безопасность – lxs