code: public void screen(
        @Nullable final String category,
        @Nullable final String name,
        @Nullable final Properties properties,
        @Nullable final Options options) {
      assertNotShutdown();
      if (isNullOrEmpty(category) && isNullOrEmpty(name)) {
        throw new IllegalArgumentException("either category or name must be provided.");
      }
  
      analyticsExecutor.submit(
          new Runnable() {
            @Override
            public void run() {
              final Options finalOptions;
              if (options == null) {
                finalOptions = defaultOptions;
              } else {
                finalOptions = options;
              }
  
              final Properties finalProperties;
              if (properties == null) {
                finalProperties = EMPTY_PROPERTIES;
              } else {
                finalProperties = properties;
              }
  
              //noinspection deprecation
              ScreenPayload.Builder builder =
                  new ScreenPayload.Builder()
                      .name(name)
                      .category(category)
                      .properties(finalProperties);
              fillAndEnqueue(builder, finalOptions);
            }
          });
    }
docs: The screen methods let your record whenever a user sees a screen of your mobile app, and attach
  a name, category or properties to the screen. Either category or name must be provided.
  
  @param category A category to describe the screen. Deprecated.
  @param name A name for the screen.
  @param properties {@link Properties} to add extra information to this call.
  @param options To configure the call.
  @see <a href="https://segment.com/docs/spec/screen/">Screen Documentation</a>