0

我正在尝试创建一个每 5 秒执行一次的服务。问题是我把while(true)它给了我一个错误的那一刻。我想这是不允许的。如果是这样,实现重复方法的更好方法是什么?

public class repService extends Service {

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

    while(true){
        Thread timer = new Thread(){
            public void run(){
                try {
                    sleep(5000);
                    // do something
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } finally {
                    // do something
                }
            }
        };
        timer.start();  
    }
}
4

3 回答 3

1

您不能将语句放在要运行的方法之外。将while 循环放入服务的方法onCreateonStartCommand方法中。一旦你的服务启动,这些方法保证被调用。

为了实现重复性任务,使用HandlerThread,LooperHandlerhandler 的postDelayed方法来充分利用它。

于 2012-06-12T10:09:42.817 回答
1
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {     
    @Override
    public void run() {
        // do something     
    }
}, 0, 5000);
于 2012-06-12T10:13:30.887 回答
0
which every 5 seconds does something

您可以使用Timer().schedule每 5 秒重复一次任务。

new Timer().schedule(new TimerTask() {

            @Override
            public void run() {
                //Do your task here

            }
        }, System.currentTimeMillis(), 5000);

如果您需要修改或玩 UI 部分,请确保编写比代码runOnUiThread

于 2012-06-12T10:12:06.643 回答