Ejemplo n.º 1
0
  private void updateInCurrentThread() {
    if (quitFlag) {
      return;
    }
    long startMS = SystemClock.uptimeMillis();
    long d = syncTimer(startMS);
    if (d < 0) {
      removeMessages(UPDATE);
      sendEmptyMessageDelayed(UPDATE, 60 - d);
      return;
    }
    d = mDanmakuView.drawDanmakus();
    removeMessages(UPDATE);
    if (d
        > mCordonTime2) { // this situation may be cuased by ui-thread waiting of DanmakuView, so we
                          // sync-timer at once
      timer.add(d);
      mDrawTimes.clear();
    }
    if (!mDanmakusVisible) {
      waitRendering(INDEFINITE_TIME);
      return;
    } else if (mRenderingState.nothingRendered && mIdleSleep) {
      long dTime = mRenderingState.endTime - timer.currMillisecond;
      if (dTime > 500) {
        waitRendering(dTime - 10);
        return;
      }
    }

    if (d < mFrameUpdateRate) {
      sendEmptyMessageDelayed(UPDATE, mFrameUpdateRate - d);
      return;
    }
    sendEmptyMessage(UPDATE);
  }