2011-07-22 5 views
0

Я пытаюсь реализовать функцию автоматического выхода из системы. Если приложение не используется в течение 1 часа, я бы хотел автоматически привести пользователя на экран входа в систему. Когда телефон блокируется, поток, который отслеживает, если приложение используется, похоже, не продолжается. Мой код выглядит следующим образом:Автоматический выход из системы

/** 
* This Deamon checks if the application is idle and 
*/ 
private class LogoutDeamon extends Thread { 

    public void run() { 

     while (!logoutDeamon) { 
      try { 
       System.out.println("Logout Counter:" + logoutConter); 
       if (logoutConter <= 0) { 
        logoutDeamon = true; 
       ApplicationManager.getInstance().setLoggedOut(true); 
        ApplicationManager.getInstance().Log(Level.INFO, "Auto Log out"); 
        logout(); 
       } else { 
        decreamentCounter(); 
       } 
       sleep(60000 * 1); 
      } catch (ParserException ex) { 
       Log(Level.ERROR, " Par. Ex. in Logout-Deamon:" + ex.getMessage()); 
       logout(); 

      } catch (ServerException ex) { 
       Log(Level.ERROR, " Ser. Ex. in Logout-Deamon:" + ex.getErrorMessage()); 
       logout(); 
      } catch (InterruptedException ie) { 
       Log(Level.ERROR, "Int. Ex. in Logout-Deamon:" + ie.getMessage()); 
      } catch (Exception ex) { 
       Log(Level.ERROR, "Erro in Logout-Deamon:" + ex.getMessage()); 
       logout(); 
      } 
     } 
    } 

    private void logout(){ 
     Intent broadcastIntent = new Intent(); 
     broadcastIntent 
       .setAction("com.package.ACTION_LOGOUT"); 
     applicationContext.sendBroadcast(broadcastIntent); 

     Intent loginIntent = new Intent(applicationContext, 
       Login.class); 
     loginIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     applicationContext.startActivity(loginIntent); 
    } 

} 

Я пропустил что-то? Может кто-то любезно мне помочь с этим. Заранее спасибо.

ответ

1

Я не думаю, что вам нужна нить. Зарегистрируйте время в onPause. В onResume тест, если прошло 1 час. Если нет, сбросьте таймер.

+0

Проблема заключается в том, что фактор времени не фиксирован. Я получаю период выхода из сервера. Поэтому я помещаю нить в течение минуты и уменьшаю таймер. Будет ли поток попадать в состояние паузы, если телефон заблокирован? –

+0

Ваша нить прекратит выполнение, когда устройство перейдет в спящий режим. Во всяком случае, когда устройство переходит в спящий режим или когда пользователь закрывает приложение, вызывается onPause. Когда приложение запустится снова, будет вызываться onResume. Эти два метода должны быть достаточными для реализации вашей бизнес-логики - не требуется время подсчета потоков. – kgiannakakis

+0

Спасибо. Должна ли эта логика выполняться во всех видах деятельности? Поскольку у меня есть несколько действий в моем приложении? –

Смежные вопросы