private void startCameraSource() {
   try {
     mPreview.start(mCameraSource, mGraphicOverlay);
     boolean startAsyncTask = sp.getBoolean("vision_continuous_test", false);
     if (!startAsyncTask) {
       if (asyncTask != null) {
         // Check if there is an Async Task running. If so, cancel it
         switch (asyncTask.getStatus()) {
           case RUNNING:
             asyncTask.cancel(true);
             asyncTask = null;
             break;
           case PENDING:
             asyncTask.cancel(true);
             asyncTask = null;
             break;
           case FINISHED:
             asyncTask = null;
             break;
         }
       }
       asyncTask =
           new AsyncTaskWaitForBarcode(
                   this, Integer.parseInt(sp.getString("vision_sleep", "1500")))
               .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
     }
   } catch (IOException e) {
     mCameraSource.release();
     mCameraSource = null;
   }
 }
  @Override
  protected void onDestroy() {
    super.onDestroy();
    if (mCameraSource != null) mCameraSource.release(); // release the resources

    if (asyncTask != null) {
      // Check if there is an Async Task running. If so, cancel it
      switch (asyncTask.getStatus()) {
        case RUNNING:
          asyncTask.cancel(true);
          asyncTask = null;
          break;
        case PENDING:
          asyncTask.cancel(true);
          asyncTask = null;
          break;
        case FINISHED:
          asyncTask = null;
          break;
      }
    }
  }