Мне нужно поддерживать соединение TCP на неопределенное время (насколько это возможно). Это не собственный сервер, поэтому мы не можем изменить способ его работы. Этому серверу каждую минуту требуется какой-то пинг, чтобы знать, что соединение активно. Если сервер не получает эхо-запрос через несколько минут (менее пяти), соединение и сеанс закрываются. Таким образом, мне нужно поддерживать TCP-соединение с сервером и иметь возможность отправлять эхо-запросы в указанные периоды.
На данный момент у меня есть служба Android с флагом «текущий», поэтому Android не должен ее убивать (по крайней мере, обычными процедурами). Кажется, что служба Android работает нормально и периодически отправляются эхо-запросы. Однако, когда служба запущена на мобильном телефоне (не в эмуляторе) и бездействует, кажется, что Android «замораживает» службу, пока ЦП спит, поэтому отправка эхо-запросов TimerTask перестает работать и соединение разрывается.
Я пробовал чтобы заблокировать телефон от перехода в спящий режим с частичной блокировкой пробуждения, и это решает проблему, но телефон потребляет слишком много батареи, что невозможно.
Я заметил, что AlarmManager может помочь в этой задаче, поэтому я хочу запланировать будильник чтобы обновить запущенную службу, а затем отправить пинг. Это позволит процессору перейти в спящий режим, а также отправит пинг. Но расписание срабатывания будильника каждую минуту может также сильно расходовать заряд батареи или нет?
Я не тестировал этот подход на данный момент, но это возможно? есть ли лучший способ сохранить такое TCP-соединение? Как службы Android, такие как Gmail, решают такие проблемы?