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ループをサービスのメソッド内に配置しonCreateます。onStartCommandこれらのメソッドは、サービスが開始されると必ず呼び出されます。

また、反復的なタスクを実装するにはHandlerThread、 、LooperHandlerおよびハンドラの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().schedule5秒ごとにタスクを繰り返すために使用できます。

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

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

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

UI部分を変更または再生する必要がある場合は、コードよりも書くようにしてくださいrunOnUiThread

于 2012-06-12T10:12:06.643 に答える