Почему доступ к сети в моем приемнике вещания Geofence ненадежен? - PullRequest
0 голосов
/ 10 сентября 2018

Вариант использования:

Когда срабатывает геозона, нам нужно связаться с сервером как можно скорее. Мы решили эту проблему с помощью неявного BroadcastReceiver, вызывающего Сервис в течение нескольких лет, но проблематичным в новых версиях из-за ограничений фона Doze и Oreo.

Попытки исправить:

  1. Мы переместили регистрацию геозоны из неявного -> явного широковещательного приемника, чтобы обойти ограничение «фонового режима».

  2. Мы попытались сделать это, как в примерах Googles, то есть получатель широковещания вызвал enqueueWork () на JobIntentService . Проблема в том, что мы часто замечали длительную «задержку» между тем, когда задание было запланировано и когда оно действительно выполнялось. Наш рекорд больше часа!

Итак, вместо этого мы попытались перенести все функции в BroadcastReceiver и использовать goAsync () для выполнения сетевого вызова. (если вы попытаетесь выполнить сетевую операцию синхронно, вы получите исключение «нет сети из основного потока»).

Это работает, поскольку мы можем запустить поток и выполнить код, но сетевая операция доставляет нам проблемы.


Проблема:

Итак, наше текущее решение из-за вышеуказанных проблем является явным BroadcastReceiver, использующим goAsync () для выполнения вызова сервера.

Тем не менее, сетевой вызов работает очень периодически. Мы довольно часто получаем ошибки " java.net.SocketException: Socket is closed ". Это не проблема сервера, и она всегда работает при вызове из нашего «обычного» кода приложения.

Я не уверен, почему это происходит, но я подозреваю, что режим Doze? Хотя я не уверен, как получить его, когда Receiver фактически вызывается триггером геозоны.

Вопросы:

  1. Кто-нибудь знает, почему из-за нашей goAsync () происходит сбой работы сети? Опять же, многопоточность работает, просто мы получаем ошибки сокета при фактической работе сети.

  2. Есть ли в более новых версиях Android какой-либо путь от триггера геозоны для прямого сетевого вызова, как мы и пытаемся сделать, помимо того, что мы уже пробовали?

Указатели и мысли очень ценятся!

...