2011-07-22 17 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

私が抱えている問題は、時間要素が固定されていないことです。私はサーバーからログアウト期間を取得します。したがって、私はスレッドを1分間スリープ状態にし、タイマーを減らします。電話機がロックされている場合、スレッドは一時停止状態になるでしょうか? –

+0

デバイスがスリープモードに入ると、スレッドの実行が停止します。とにかく、デバイスがスリープ状態になるか、ユーザーがアプリケーションを閉じると、onPauseが呼び出されます。アプリケーションが再び起動すると、onResumeが呼び出されます。これらの2つの方法は、ビジネスロジックを実装するのに十分である必要があります。スレッドの計測に時間がかかりません。 – kgiannakakis

+0

ありがとうございます。このロジックをすべてのアクティビティで実装する必要がありますか?私は自分のアプリケーションで複数のアクティビティを持っているので? –

関連する問題