code: @Override
      public D loadInBackground() {
          synchronized (this) {
              if (isLoadInBackgroundCanceled()) {
                  throw new OperationCanceledException();
              }
              mCancellationSignal = new CancellationSignal();
          }
          try {
              Cursor cursor = getContext().getContentResolver()
                      .query(mUri, mProjection, mSelection, mSelectionArgs, mSortOrder,
                              mCancellationSignal);
              if (cursor != null) {
                  try {
                      // Ensure the cursor window is filled.
                      cursor.getCount();
                      cursor.registerContentObserver(mObserver);
                  } catch (RuntimeException ex) {
                      cursor.close();
                      throw ex;
                  }
                  return wrap(cursor);
              }
              return null;
          } finally {
              synchronized (this) {
                  mCancellationSignal = null;
              }
          }
      }
docs: /* Runs on a worker thread