Я рекомендую использовать аварийные сигналы.
Вы можете использовать службы для продолжения выполнения кода в фоновом режиме и wakelocks, но у меня была та же проблема, которую вы описали с несколькими указанными c смартфонами, а также выяснилось, что службы могут быть убит в любой момент, если системе android требуется свободная память.
Решение, которое я нашел, состояло в том, чтобы использовать сигналы тревоги (сигнал тревоги, который выполняет службу переднего плана). Если вы запланируете аварийные сигналы, эти аварийные сигналы будут go отключены независимо от того, выполняется ли ваше приложение или нет. Таким образом, приложение может определить местоположение устройства, даже если система убила службу из-за нехватки ресурсов. Это единственное решение, которое я нашел, которое сработало в этом сценарии.
Идея пришла ко мне в некоторых Google ввода-вывода, когда они сказали, что если вам действительно нужно, чтобы ваше приложение продолжало, независимо от того, что вы должны использовать тревоги вместо services.
Используйте точные амармы, так как неточные иногда на некоторых устройствах занимают, по крайней мере, 5 минут, пока не сработает сигнализация.
Это сработало для меня, но я делал это 2-3 года go. Я надеюсь, что это все еще работает.