Автоотключение через X минут, Android

Я ищу, чтобы реализовать функцию, которая выводит пользователя после X минут бездействия. Пройдя аналогичный ответ на SO, предложенный метод, похоже,

  • У вас есть таймер, работающий в фоновом режиме. Запланируйте его до таймаута через x минут.
  • В каждой функции, где пользователь взаимодействует с приложением (в основном все обработчики событий), вызывается метод, который сбрасывает таймер.

Я не могу думать ни о чем лучше этого, но это кажется огромной болью даже для приложения среднего размера, которое имеет 6-7 разных экранов и целую кучу компонентов пользовательского интерфейса. Есть ли лучший способ справиться с этим?

Благодаря,
Тея.

    У вас есть таймер, работающий в фоновом режиме. Запланируйте его до таймаута через x минут.

    Нет и да. Используйте таймер, если вы реализуете его в Service или в IntentService . В противном случае, не надо.

    В каждой функции, где пользователь взаимодействует с приложением (в основном, все обработчики событий), вызовите метод, который сбрасывает таймер.

    Это решение будет трудно поддерживать.

    У вас должен быть IntentService (демонстрирующий статью здесь ), работающий в фоновом режиме, который может легко реализовать TimerTask или Handler и сделать исполняемый код внутри него, чтобы запустить трансляцию для ваших действий. В вашей деятельности вы можете легко добавить BroadcastReciever и в этом случае вы можете выйти из системы, если время не работает. Вы можете начать свою службу, когда ваше приложение не будет видно пользователю.

    Вы можете использовать CountDownTimer и перезапустить его из onUserInteraction() в каждом Activity()

    Вот как я бы это сделал:

    1) Создать глобальную переменную для представления журнала времени

    2) Во время вызова onStop для каждого действия обновите глобальную переменную с текущим временем.

    3) Во время вызова onResume для каждого действия сравнивайте текущее время с глобальным временем переменной, чтобы узнать, сколько времени прошло

    Это то, что я хотел реализовать для себя. Вот «библиотека», которую я сделал: https://github.com/zoltanersek/android-timeout-activity

    Применение:

     public class TestActivity extends TimeoutActivity { @Override protected void onTimeout() { // logout } @Override protected long getTimeoutInSeconds() { return 15 * 60; // 15 minutes } }