Лучший способ определить текущее прикладное приложение (с помощью службы?)

Я создаю приложение, которое должно определить время работы приложения, поэтому я могу показать статистику пользователей приложений, которые он использует. Я нашел несколько решений в Интернете, но у всех есть свои недостатки.

Вот два лучших варианта, которые я нашел:

Я также искал намерение стрелять, когда приложение запускается или останавливается, но, похоже, нет ни одного (см. Резюме). Это сообщение подтверждает это. Также я нашел класс: ActivityLifecycleCallbacks, который получает обратные вызовы, когда действие изменяет его состояние. Но это только для внутреннего (читайте внутри вашего собственного приложения).

Поэтому моя идея – использовать сервис для опроса текущего приложения переднего плана на устройствах, на которых запущена версия, отличная от lollipop, и использовать новый API на устройствах, работающих на леденец или больше. Но является ли эта «сервисная» идея лучшим вариантом, потому что, как я уже говорил, кажется, что батарея неэффективна? Может быть, есть лучшие варианты?

Faas

1-й вариант определенно плох, поскольку он устарел.

Я бы предпочел вам использовать android.app.usage

То, что приложение, которое вы цитируете, вероятно, делает, тратит много времени на процессор, оперативную память и время автономной работы, постоянно осматривая ActivityManager.

Имейте в виду, что то, что вы предлагаете отслеживать, если вы планируете, чтобы кто-либо, кроме пользователя, обращался к нему, граничит с нарушениями конфиденциальности типа, получившего CarrierIQ, в достаточной степени сложности.