-3

100msごとに1000msの操作をしたいのですが。

私は私が使用する必要があると信じています

handler

それ、どうやったら出来るの?

4

4 に答える 4

3
Handler h = new Handler();
int count = 0;
int delay = 100;//milli seconds
long now = 0;

h.postDelayed(new Runnable(){

    public void run(){
        now = System.currentTimeMillis();
        //do something

        if(10>count++)
        h.postAtTime(this, now + delay);
    },
delay};

操作の実行には100ミリ秒未満かかる必要があることに注意してください。そうしないと、100ミリ秒ごとに実行できなくなります。これは、すべてのメソッドに当てはまります。

于 2012-08-07T13:52:46.203 に答える
1
Timer t = new Timer();
int count = 0;
t.scheduleAtFixedRate(new TimerTask() {
    count++;
    // Do stuff
    if (count >= 10)
        t.cancel();
}, 0, 100);

TimerTaskこれにより、0ミリ秒の遅延でを実行するタイマーがスケジュールされます。TimerTask100ミリ秒ごとに本体を実行します。countタスクのどこにいるかを追跡するために使用して、10回の反復の後、タイマーをキャンセルできます。

@ Jug6ernautが述べたように、タスクの実行に時間がかからないことを確認してください。長時間のタスク(この場合、100ミリ秒より長くかかるタスク)は、遅延/潜在的に望ましくない結果を引き起こします。

于 2012-08-07T13:53:00.930 に答える
0

を使用してこれを行うことができますTimer

于 2012-08-07T13:52:31.880 に答える
0

今はこれをテストする時間がありませんが、これは機能するはずです

これは1つの方法です。

  • ここから呼び出したいメソッドは、おそらく静的である必要があります
  • このクラスは別のクラスにネストできます
  • %(モジュラス)を使用すると、タイマーがカウントアップを続け、より多くの間隔で発生するように設定できます。

このタイマーを作成します。

private Timer mTimer = new Timer();

このタイマーを開始するには:

mTimer.scheduleAtFixedRate(new MyTask(), 0, 100L);

タイマークラス:

    /**
     * Nested timer to call the task
     */
    private class MyTask extends TimerTask {
        @Override
        public void run() {
            try {
                counter++;
                //call your method that you want to do every 100ms
                            if (counter == 10) {
                               counter = 0;
                               //call method you wanted every 1000ms
                            }
                Thread.sleep(100);
            } catch (Throwable t) { 
                //handle this  - maybe by starting it back up again            
            }
        }       
    }
于 2012-08-07T14:10:11.523 に答える