гарантирован порядок трансляции? то есть, если я это сделаю,синхронные сообщения от уровня обслуживания до уровня пользовательского интерфейса
sendBroadcast(intent1);
sendBroadcast(intent2);
Получатели гарантированно получат намерение1 до намерения2? я подозреваю, что ответ на это нет, но в этом случае я не совсем уверен, как решить мою проблему.
Я пытаюсь создать индикатор «занят» для своего приложения, которое показывает занят, когда устройство говорит в сети, а затем уходит, когда сетевое общение завершено. вся сетевая связь происходит в службе намерений.
моя попытка состояла в том, чтобы отправить намерение BUSY_START, когда я начну сетевое общение в службе, и BUSY_STOP, когда закончится сетевая связь. это, по-видимому, в основном работает, но я иногда нахожусь, что я останавливаюсь и запускаю сообщения из строя.
есть ли лучший способ решить эту проблему?
Я подумываю добавить идентификатор для каждого занятого намерения, чтобы они могли быть сопряжены. таким образом, если я получаю старт, для которого я уже получил остановку, я могу игнорировать его. или, проще говоря, добавить целочисленный порядковый номер в каждую трансляцию. если я когда-либо получаю трансляцию, для которой последовательность текущего намерения меньше, чем последовательность последнего полученного намерения, игнорируйте его.
Этот код, как вы его представили, выглядит так, как будто он вызывает поток службы непосредственно в основной поток пользовательского интерфейса Activity. Это не-нет. Я действительно думаю, что вам нужен объект Handler, если вы хотите звонить из одного потока в другой. – mportuesisf
Вы правы, так оно и есть. предполагается, что если активность изменяет поток пользовательского интерфейса в 'onEvent()', он должен это делать, используя 'runOnUIThread()'. структура обратного вызова могла бы скрыть это, если бы мы этого захотели, но я предпочел бы оставить это до потока пользовательского интерфейса, чтобы решить, нужен ли ему этот дополнительный шаг. –
Хорошо, что вы упомянули о том, что для тех, кто хотел использовать ваш пример кода в своем приложении. – mportuesisf