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