protected Boolean doInBackground(Void... params) {
      // Prevent the onDestroy() method to overlap with initialization:
      synchronized (mShutdownLock) {
        QCAR.setInitParameters(CopyOfQCARInitActivity_xxx.this, mVuforiaFlags);
        do {
          mProgressValue = QCAR.init();
          // Publish the progress value:
          publishProgress(mProgressValue);
        } while (!isCancelled() && mProgressValue >= 0 && mProgressValue < 100);

        return (mProgressValue > 0);
      }
    }
  @Override
  protected void onDestroy() {
    DLog.LOGD("onDestroy");
    super.onDestroy();
    SysMng.OnDeInit();
    // Cancel potentially running tasks
    if (mInitVuforiaTask != null
        && mInitVuforiaTask.getStatus() != InitVuforiaTask.Status.FINISHED) {
      mInitVuforiaTask.cancel(true);
      mInitVuforiaTask = null;
    }

    if (mLoadTrackerTask != null
        && mLoadTrackerTask.getStatus() != LoadTrackerTask.Status.FINISHED) {
      mLoadTrackerTask.cancel(true);
      mLoadTrackerTask = null;
    }

    // Ensure that all asynchronous operations to initialize Vuforia
    // and loading the tracker datasets do not overlap:
    synchronized (mShutdownLock) {

      // Do application deinitialization in native code:
      deinitApplicationNative();

      // Unload texture:
      mTextures.clear();
      mTextures = null;

      // Destroy the tracking data set:
      destroyTrackerData();

      // Deinit the tracker:
      deinitTracker();

      // Deinitialize Vuforia SDK:
      QCAR.deinit();
    }

    System.gc();
  }