code: public <T> void onIntegrationReady(final String key, final Callback<T> callback) {
      if (isNullOrEmpty(key)) {
        throw new IllegalArgumentException("key cannot be null or empty.");
      }
  
      analyticsExecutor.submit(
          new Runnable() {
            @Override
            public void run() {
              HANDLER.post(
                  new Runnable() {
                    @Override
                    public void run() {
                      performCallback(key, callback);
                    }
                  });
            }
          });
    }
docs: Register to be notified when a bundled integration is ready.
  
  <p>In most cases, integrations would have already been initialized, and the callback will be
  invoked fairly quickly. However there may be a latency the first time the app is launched, and
  we don't have settings for bundled integrations yet. This is compounded if the user is offline
  on the first run.
  
  <p>You can only register for one callback per integration at a time, and passing in a {@code
  callback} will remove the previous callback for that integration.
  
  <p>Usage:
  
  <pre> <code>
  analytics.onIntegrationReady("Amplitude", new Callback() {
  {@literal @}Override public void onIntegrationReady(Object instance) {
  Amplitude.enableLocationListening();
  }
  });
  analytics.onIntegrationReady("Mixpanel", new Callback<>() {
  {@literal @}Override public void onIntegrationReady(MixpanelAPI mixpanel) {
  mixpanel.clearSuperProperties();
  }
  })*
  </code> </pre>