2012-03-26 11 views
2

タイマーを使用して画像を更新していますが、致命的なパフォーマンス上の問題が発生します。その後、ログを出力し、タイマーが1500より速く実行されることを確認します。 問題は何ですか?私のタイマースレッドで何が問題になっていますか?

間違った速度でスケジュール:

startToDraw()353:のSystem.currentTimeMillis()= 1332742387400
startToDraw()353:のSystem.currentTimeMillis()= 1332742387410
startToDraw()353。 :のSystem.currentTimeMillis()= 1332742387438
startToDraw()353:のSystem.currentTimeMillis()= 1332742387449
startToDraw()353:のSystem.currentTimeMillis()= 1332742387472

timer = new Timer(); 
timer.schedule(new TimerTask() { 
    @Override 
    public void run() { 
     while (!isDestroyed) { 
      try { 
       Log.i(getClass().getName(), "startToDraw().353: System.currentTimeMillis() = " + System.currentTimeMillis()); 
       handler.sendMessage(new Message()); 
      } catch (Exception e) { 
      } 
     } 
    } 
}, 0, 1500); 
+0

? 'sendMessage'はすぐに戻ります。 – sastraxi

+0

メインスレッドにスリープを追加しようとしましたか? – Andreas

+0

Thread.sleep(ミリ秒)を使用してください。 –

答えて

1

私は、あなたが繰り返し実行されているwhileループに入ることが問題だと思います。あなたはおそらく、あなたが無効な状態にあるかどうかをチェックし、そうであればタスクを実行しないでください。だから私は変更になります。

while (!isDestroyed) { 
    try { 
     Log.i(getClass().getName(), "startToDraw().353: System.currentTimeMillis() = " + System.currentTimeMillis()); 
     handler.sendMessage(new Message()); 
    } catch (Exception e) { 
} 

に:あなたが待つところ、私は表示されません

if (!isDestroyed) { 
    try { 
     Log.i(getClass().getName(), "startToDraw().353: System.currentTimeMillis() = " + System.currentTimeMillis()); 
     handler.sendMessage(new Message()); 
    } catch (Exception e) { 
} 
+0

すぐにお返事ありがとうございます!while(...)ではなくif(...)を使用してください! – thecr0w

関連する問題