Давайте начнем с понимания причин, по которым ваш код не выполняет то, что вы хотите.
Проблема 1. Вам следует избегать длительных задач в ваших действиях на Android, особенно когда онине видны, потому что система может уничтожить вашу деятельность или процесс приложения, поэтому код не будет запущен.
Проблема 2. Каждое действие отправляет обратный вызов disconnect
вашему обработчику, ив случае, когда пользователь взаимодействует со вторым действием, обратный вызов первого действия не будет сброшен и сработает.
Решение.
Теперь давайте подумаем о подходе к решениюэтот.Было бы лучше иметь одно место для отслеживания бездействия.Это может быть одиночка или вы можете использовать объект приложения.И обрабатывать 2 случая отдельно: первый - если ваш пользователь находится внутри приложения и не использует его, а другой - когда ваш пользователь выходит из приложения.
Для первой цели у вас может быть подход, аналогичныйваш текущий, но сделайте общий доступ disconnectCallback
в приложении.Переместите обработчик, функцию обратного вызова и сбросьте логику обратного вызова в свой класс приложения и сделайте
@Override
public void onUserInteraction()
вызов resetCallback
в приложении.Это заставит все Действия использовать один и тот же обратный вызов и решить проблему 2.
Для второй цели вы можете использовать Обратные вызовы жизненного цикла действия .Каждый раз, когда ваша деятельность приостанавливается, сохраняйте отметку времени.Затем при каждом возобновлении активности сравнивайте эту временную метку со временем возобновления, если оно больше 5 минут, затем выйдите из системы и перейдите к экрану входа.Это решит проблему 1. Вам нужно будет сохранить эту временную метку, потому что приложение может быть убито системой, а все разделяемое в памяти будет удалено.Например, используйте общие настройки.
И последнее, вам нужно отменить обратные вызовы, когда приложение переходит в фоновый режим.Вы можете сделать это в onActivityPaused(Activity activity)
ваших обратных вызовов активности, там же, где вы будете запускать логику для второго случая.