Android - 服务 - 启动命令只调用一次

时间:2012-03-27 13:02:43

标签: android android-service

在我的活动oncreate方法中,我使用OnStartCommand()调用了一个服务。我的要求是当用户在同一个Activity上时(当Activity可见时),一组代码应该重复运行。 (示例..我应该进行Web服务调用并获取响应并在定期间隔后基于它执行某些操作。)

我把这组代码放在这个方法中。

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

        // Code to be repeated

return Service.START_STICKY;
}

但是,这只会执行一次。从用户访问此页面到离开此页面之间如何重复运行?

2 个答案:

答案 0 :(得分: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 :(得分:1)

您可以将Timer用于方法的固定周期执行。

请参阅此处的教程:

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