docs: public void release() {
          if (mState == STATE.STOPPING) {
              Log.i(TAG, "Release called while stopping. Trying to sync");
              synchronized (mStopFence) {
                  while (mState != STATE.UNINITIALIZED) {
                      Log.i(TAG, "Release called while stopping. Waiting for uninit'd state. Current state: " + mState);
                      try {
                          mStopFence.wait();
                      } catch (InterruptedException e) {
                          e.printStackTrace();
                      }
                  }
              }
              Log.i(TAG, "Stopped. Proceeding to release");
          } else if (mState != STATE.UNINITIALIZED) {
              Log.i(TAG, "release called in invalid state " + mState);
              return;
              //throw new IllegalArgumentException("release called in invalid state");
          }
          mState = STATE.RELEASING;
          mHandler.sendMessage(mHandler.obtainMessage(MSG_RELEASE));
      }