我正在使用计时器更新图片,但是这会导致致命的性能问题。然后我打印日志,发现我的计时器运行得比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);

最佳答案

我认为问题在于您正在进入一个重复运行的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) {
}

10-05 22:02