docs: private void start(boolean playBackwards) {
          if (Looper.myLooper() == null) {
              throw new AndroidRuntimeException("Animators may only be run on Looper threads");
          }
          mPlayingBackwards = playBackwards;
          mCurrentIteration = 0;
          mPlayingState = STOPPED;
          mStarted = true;
          mStartedDelay = false;
          sPendingAnimations.get().add(this);
          if (mStartDelay == 0) {
              // This sets the initial value of the animation, prior to actually starting it running
              setCurrentPlayTime(getCurrentPlayTime());
              mPlayingState = STOPPED;
              mRunning = true;
  
              if (mListeners != null) {
                  ArrayList<AnimatorListener> tmpListeners =
                          (ArrayList<AnimatorListener>) mListeners.clone();
                  int numListeners = tmpListeners.size();
                  for (int i = 0; i < numListeners; ++i) {
                      tmpListeners.get(i).onAnimationStart(this);
                  }
              }
          }
          AnimationHandler animationHandler = sAnimationHandler.get();
          if (animationHandler == null) {
              animationHandler = new AnimationHandler();
              sAnimationHandler.set(animationHandler);
          }
          animationHandler.sendEmptyMessage(ANIMATION_START);
      }