/**
  * Starts an asynchronous load of the data. When the result is ready the callbacks will be called
  * on the UI thread. If a previous load has been completed and is still valid the result may be
  * passed to the callbacks immediately.
  *
  * <p>Must be called from the UI thread.
  */
 @Override
 protected void onStartLoading() {
   // XXX: do we really return the cached results _before_ checking if the content has changed?
   if (cachedResults != null) {
     deliverResult(cachedResults);
   }
   if (takeContentChanged() || cachedResults == null) {
     forceLoad();
   }
   // watch for data changes
   dao.registerObserver(this);
 }