IntentServices получает время ожидания сокета, когда MainActivity получает событие onPause () - PullRequest
0 голосов
/ 04 апреля 2019

Я портирую 4-летнее Android-приложение на последний Android API (28) и сталкиваюсь с серьезными проблемами, которые не знаю, как исправить. Код приложения здесь: https://github.com/briggsm/ToWF-Android.

Организация кода такая:

У меня есть MainActivity (подкласс AppCompatActivity (из android.support.v7.app.AppCompatActivity;)), который порождает

InfoService, подкласс IntentService и,

NetworkPlaybackService, подкласс IntentService

Каждая из этих служб (в onHandleIntent ()) открывает сокет для подключения к серверу. Затем они оба переходят в «вечный» цикл ожидания в сокете и обработки пакетов и отправки ответов (периодически).

Когда MainActivity получает события onPause (), а затем onStop () (из-за того, что экран становится темным), мои службы немедленно сообщают о получении SocketTimeoutExceptions.

Код, похоже, правильно создает и приобретает () блокировку WiFi - хотя это делает только 1 из трех частей - NetworkPlaybackService. (Должны ли каждая служба захватывать блокировку, поскольку они оба открывают сокет?) Кроме того, NetworkPlaybackService создает и получает wakeLock.

Обратите внимание, что код явно не помещает службы "в фоновом режиме". Я не уверен, важно это или нет, или, действительно, как это сделать.

Похоже, что онлайн-совет указывает, что код должен использовать не IntentService, а JobIntentService или что-то подобное.

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

Спасибо.

Vic

...