2016-05-26 20 views
0

私は同じメソッドを呼び出したいと思います。たとえば、5秒ごとに、データベースの変更をリッスンする何らかの種類のデータベースリスナーを作成しようとしています。次のコードは動作しません。テスト用に5秒ごとに "RUNNING"を出力することを期待していますが、最初にメソッドを呼び出すと一度しか呼び出されません。AndroidループメソッドごとにX秒

private void DBListern() { 
    // TODO Auto-generated method stub 

     //accessWebService(); 
     System.out.println("RUNNING"); 

     final Handler handler = new Handler(); 
     handler.postDelayed(new Runnable() { 
     public void run() { 

     DBListern(); 

     } 

    }, 5000); 
} 
+0

なぜデータベースを変更して実現する場所にインターフェイスを追加しないのですか? –

答えて

0

java.util.concurrent.ScheduledExecutorServiceを使用してください。 例:

private final ScheduledExecutorService exec = Executors.newScheduledThreadPool(1); 

private void DBListern(int delayInSeconds) { 

    //accessWebService(); 
    System.out.println("RUNNING"); 

    exec.schedule(new Runnable() { 
      @Override 
      public void run() { 
       DBListern(); 
      } 
     }, delayInSeconds, TimeUnit.SECONDS); 

}

0

[OK]をので、私はDBListern 5秒ごとに呼び出すloop()と呼ばれる別の関数を作成関数が自分自身を呼び出すことはできませんいくつかの理由:だから

private void DBListern() { 
    // TODO Auto-generated method stub 

    //accessWebService(); 
    System.out.println("RUNNING"); 

} 


private void loop() { 
      // TODO Auto-generated method stub 

      final Handler handler = new Handler(); 
      handler.postDelayed(new Runnable() { 
      public void run() { 

      DBListern(); 
      handler.postDelayed(this, 5000); 
     } 
    }, 5000); 

} 

loop()です最初に呼び出されてからDBListernが5秒ごとに呼び出されます。

+0

コードによってメモリリークが発生することがあります。 'Loader'を使ってこのジョブやイベントバスを実行したり、いくつかのインターフェースを作成することができます。 –

関連する問題