Android Лучший способ обнаружить и обработать пользователя НЕАКТИВНОСТЬ

Неактивность - очень важное событие. Для многих приложений, если пользователь не взаимодействует с ним в течение определенного количества секунд, его время до reset приложения и вернуться к основному отключению активности или сохранить энергию. Поэтому я действительно хотел бы получить некоторые отзывы о наилучшем способе обнаружить это. На самом деле, я думаю, что все выиграют от хорошего решения.

Итак, мой вопрос двоякий:

1) Существует ли лучший способ обнаружить неактивность пользователя, чем использование комбинации  activity.onUserInteraction() - reset CountDownTimer?

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

Примечание. Другим сообщенным недостатком является то, что CountDownTimer отключен от основного потока и может не обновляться        правильно. Я не уверен, насколько велика проблема?

Примечание. У CountDownTimer также есть проблемы с отменой:         как остановить/отменить андроид CountDownTimer

2) Допустим, что onUserInteraction()/CountDownTimer - лучшее/единственное решение этой проблемы  есть еще вопросы:

a), чтобы каждая активность запускала свой собственный таймер обратного отсчета?

b) Следует ли перезапустить один таймер обратного отсчета в методе onCreate для каждого вида деятельности?

c) позволяет сказать, что я хочу уменьшить экран или перейти к основной деятельности, когда обратный отсчет истекает, когда     должен ли быть установлен обработчик тайм-аута? В каждом мероприятии? В службе?

Спасибо

Ответы

Ответ 1

Просто наткнулся на этот вопрос как Я уже сейчас ответил на что-то подобное.

Лично я бы выбрал вариант 2, который вы предложили, и поместил таймер в синглтон, чтобы он был доступен во всех действиях. Нет необходимости в отдельном таймере обратного отсчета, если у вас нет особых требований реагировать друг на друга по различным функциям вашего приложения.

Почему вы хотите reset таймер в onCreate? Вы должны делать это каждый раз, когда пользователь взаимодействует с приложением, например, в методе activity.onUserInteraction().

Чтобы процитировать мой предыдущий ответ :

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

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

Затем вам нужно будет начать отслеживать взаимодействие пользователей. От твоего действий, вы можете переопределить метод onUserInteraction, это получает вызывается в любое время, когда пользователь взаимодействует с приложением, таким как ключ мероприятие. Каждый раз, когда вы нажимаете этот метод, обновляйте свой синглтон и дайте ему что-то случилось, с меткой времени.

Наконец, вам понадобится какая-то проверка цикла, чтобы постоянно проверять, что-то случилось недавно. Theres различные делали это, вы может иметь непрерывный цикл, который сравнивает текущую временную метку с последнее записанное событие, бит кода проекта:

while(true)
{
   if (timeLastEventRecorded < (now - 15))
   {
      //nothing has happened in 15 minutes, so take corrective action
   }
}

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