Хорошо, позвольте мне более подробно описать проблему и решение, которое я нашел.Проблема: у меня есть поток службы \ сети, который должен уведомлять действия, которые отправляют запросы через него, о том, что запрос или ошибка поступили асинхронно.Использование Pattern Listener требует, чтобы я настроил слушателя до или когда я отправляю запрос следующим образом:
mNetService.setRequest(request, this);
, где это Activity, которая реализует мой интерфейс слушателя.Но для этого необходимо, чтобы я удалил прослушиватель из службы в onDestroy и возвратил прослушиватель, если я когда-либо отправил запрос обратно в onCreate \ onResume, но ответ также может прийти именно тогда, когда действие не прослушивается (ландшафт \ портрет)событие), которое требует, чтобы я оставил сообщение об ошибке \ ответ в службе до тех пор, пока кто-нибудь не поднимет его и не сбросит.
Решение, которое я нашел: использование Broadcasts и BroadcastReciever.это только часть решения, но она позволяет прослушивать широковещательные рассылки (которые могут быть специфическими для определенного типа класса, означающего активность) и действия.Поскольку все мои действия наследуют базовый класс Activity, я сделал, что у них всех есть внутренний класс BroadcaseReciever, который прослушивает определенные действия в своем фильтре.Если я включаю прослушивание в C'or моей деятельности, слушатель будет зарегистрирован в onResume и отменен в onPause.Если слушатель получает событие onRectained, он вызовет метод в Activity (который я могу переопределить в моей конкретной активности) и передаст ему полученное намерение, которое может содержать все данные из ответа.
Единственное пропущенноеЧто происходит, если активность умирает на секунду, и только тогда приходит трансляция?ах, это проблема, поэтому Android вводит Sticky Broadcasts, которые остаются там, пока вы не удалите их с помощью removeStickyBroadcast (Intent), поэтому, когда идет трансляция из моего сервиса, я отправляю Sticky трансляцию, когда Activity получает мою трансляцию, она удаляет ее, поэтому она не остаетсявокруг и ввести в заблуждение деятельность о новом ответе, который прибыл.Единственная проблема - если я отправлю запрос, не дождусь ответа и сразу же перейду к следующему действию, в этом случае, когда я вернусь к этому действию, он будет думать, что получил ответ.Пока не нашел правильного решения.Но это лучше, чем мое предыдущее решение.