Мы пытаемся реализовать таймер для собственного кода в Android. Таймер должен работать точно во время пробуждения и спящего режима. Когда таймер истекает, наш собственный код будет отправлять в сеть сообщения DPD (обнаружение мертвых узлов). Мы пробовали следующие подходы.
Использование API-интерфейса Android Framework для диспетчера аварийных сигналов в коде пользовательского пространства и ниже приведены результаты:
- This doesn't give the accurate results even during wake state for small timers like 2s,3s,5s.
- Не работает именно для спящего режима тоже.
Мы попытались использовать таймер ядра в коде пространства ядра, и ниже приведены результаты:
- Works perfectly for wake state.
- Но для таймеров состояния сна срок действия вообще не истекает. Когда мы пробуждаем устройство вручную, таймеры истекают. Итак, в заключение, таймеры ядра не работают в состоянии сна.
3. Использование блокировки пробуждения * Мы стараемся избегать использования блокировки пробуждения, так как это может привести к серьезным проблемам с производительностью.
PS - Реализация Ipsec с открытым исходным кодом strongswan отправляет сообщения DPD точное время даже в спящем режиме. Но похоже, что strongswan не использует блокировку пробуждения, поэтому мы все еще пытаемся выяснить, как это работает в спящем режиме. Любой, кто ищет ответ на этот вопрос вопрос, возможно, захочет изучить этот код.
Может ли кто-нибудь предложить что-то, чтобы решить эту проблему.