@Override
 public void onStop() {
   super.onStop();
   if (mSearchTask != null) {
     mSearchTask.cancel(true);
   }
 }
  void executeSearchTask(String query) {
    if (DEBUG) Log.d(TAG, "sendQuery()");
    mSearchHolder.query = query;
    // not going through set* because we don't want to notify search result
    // observers.
    mSearchHolder.results = null;

    // If a task is already running, don't start a new one.
    if (mSearchTask != null && mSearchTask.getStatus() != AsyncTask.Status.FINISHED) {
      if (DEBUG) Log.d(TAG, "Query already running attempting to cancel: " + mSearchTask);
      if (!mSearchTask.cancel(true) && !mSearchTask.isCancelled()) {
        if (DEBUG) Log.d(TAG, "Unable to cancel search? Notifying the user.");
        Toast.makeText(
            this, getString(R.string.search_already_in_progress_toast), Toast.LENGTH_SHORT);
        return;
      }
    }
    mSearchTask = (SearchTask) new SearchTask().execute();
  }