Я портирую 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