code: public void sendAsync(SendCallback callback) {
          List<ImportService.Submit> reqs;
          try {
              reqs = prepareDataRequests();
          } catch (ApiException e) {
              IobeamException ie = new IobeamException(e);
              if (callback == null) {
                  throw ie;
              } else {
                  callback.innerCallback.failed(ie, null);
                  return;
              }
          }
  
          for (ImportService.Submit req : reqs) {
              if (callback == null && !autoRetry) {
                  req.executeAsync();
              } else if (callback != null && !autoRetry) {
                  req.executeAsync(callback.innerCallback);
              } else {
                  req.executeAsync(new ReinsertSendCallback(this, callback).innerCallback);
              }
          }
      }
docs: Asynchronous version of send() that will not block the calling thread. Any provided callback
  will be run on the background thread when the operation completes.
  
  If `autoRetry` is set, failed requests will add the previous data to the new data store.
  
  @param callback Callback for when the operation completes.
  @throws IobeamException Thrown is the client is not initialized or if the device id has not
  been set AND no callback set. Otherwise, the exception is passed to
  the callback.