2012-03-27 4 views
1

내 활동 oncreate 메소드에서 OnStartCommand()를 사용하여 서비스를 호출했습니다. 내 요구 사항은 사용자가 동일한 활동 (활동이 표시 될 때)에 있고 코드 세트가 반복적으로 실행되어야하는 경우입니다. (예. 웹 서비스 호출을하고 응답을 받아야하고 일정한 간격을두고 응답을받습니다.)Android - 서비스 - 시작 명령에서 한 번만 호출

이 코드 집합을이 메서드에 넣습니다.

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

     // Code to be repeated 

return Service.START_STICKY; 
} 

그러나 이것은 한 번만 실행됩니다. 사용자가이 페이지를 떠날 때부터이 페이지를 떠날 때까지 반복 실행하는 방법 ??

답변

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의 t = 새로운 CountDownTimer (로부터 Long.MAX_VALUE, 1000) { 공공 무효 onTick (긴 millisUntilFinished) { Log.d ("테스트", " 타이머 진드기 "); } public void onFinish() { Log.d ("test", "Timer last tick"); t.start(); } } .start(); – Anand

+0

사용자가이 활동을보고있을 때 백그라운드에서 웹 서비스 호출을해야하므로 메모리 문제가 발생하거나 강제 종료됩니까? – Prem

+0

말할 수는 없지만 타이머를 끄는 데 조심해야합니다 ... – Anand

관련 문제