2012-03-27 18 views
1

私の活動oncreateメソッドでは、私はOnStartCommand()を使ってサービスを呼び出しました。私の要件は、ユーザーが同じアクティビティ(アクティビティが表示されているとき)にいるとき、コードのセットを繰り返し実行する必要があるときです。 (例。私はWebサービスコールを行い、応答を得て、定期的にそれに基づいて何らかのアクションを実行する必要があります)。Android - サービス - 開始コマンドで一度だけ呼び出される

このコードセットをこのメソッドに入れました。

@Override 
    public int onStartCommand(Intent i, int flags , int startId){ 

     // Code to be repeated 

return Service.START_STICKY; 
} 

ただし、これは1回だけ実行されます。ユーザーがこのページに来たときからこのページを出るまで繰り返し実行するにはどうすればいいですか?

答えて

2

CountDownTimer.cancel()メソッドが動作していないことのようです:

ここを参照してくださいには、この上のチュートリアルです。

代わりにTimerを使用することをお勧めします。はるかに柔軟性があり、いつでも取り消すことができます。

public class MainActivity extends Activity {  
    TextView mTextField; 
    long elapsed; 
    final static long INTERVAL=1000; 
    final static long TIMEOUT=5000; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mTextField=(TextView)findViewById(R.id.textview1); 

     TimerTask task=new TimerTask(){ 
      @Override 
      public void run() { 
       elapsed+=INTERVAL; 
       if(elapsed>=TIMEOUT){ 
        this.cancel(); 
        displayText("finished"); 
        return; 
       } 
       //if(some other conditions) 
       // this.cancel(); 
       displayText("seconds elapsed: " + elapsed/1000); 
      } 
     }; 
     Timer timer = new Timer(); 
     timer.scheduleAtFixedRate(task, INTERVAL, INTERVAL); 
    } 

    private void displayText(final String text){ 
     this.runOnUiThread(new Runnable(){ 
      @Override 
      public void run() { 
       mTextField.setText(text); 
      }}); 
    } 
} 
1

メソッドの固定期間実行には、Timerを使用できます。

http://steve.odyfamily.com/?p=12

+0

使用CountDownTimer CountDownTimerトン=新しいCountDownTimer(はLong.MAX_VALUE、1000){ ます。public void onTick(ロングmillisUntilFinished){ Log.d( "テスト"、」:それはそのような何かかもしれタイマーダニ "); } public void onFinish(){ Log.d( "test"、 "Timer last tick"); t.start(); } } .start(); – Anand

+0

ユーザーがこのアクティビティを表示しているときにバックグラウンドでWebサービスコールを行う必要があるため、メモリに問題が発生したり、強制的に閉じることはありますか? – Prem

+0

タイマーをオフにするだけではなく、慎重にすることはできません... – Anand

関連する問題