code: @Override
      public int getItemType(BaseCell item) {
          // normally we use item.type as identity key
          // note, this now only be executed in MainThread, atomic not actually needed
          String stringType = item.stringType;
  
          // if the item is a keyType, which means item.type is not the key, use it.
          // when data custom the typeKey, we ignore the result of render service.
          if (!TextUtils.isEmpty(item.typeKey)) {
              // we should use getTypeKey()
              stringType = item.typeKey;
          } else if (item.componentInfo != null) {
              // in MVHelper#isValid ensured a componentInfo's renderService could not be null, so just use it!
              // if render service custom item type and not empty, use it as itemType
              stringType += item.componentInfo.getVersion() + item.componentInfo.getType();
              String renderType = mMvHelper.renderManager().getRenderService(item.componentInfo.getType()).getItemViewType(stringType, item.componentInfo);
              if (!TextUtils.isEmpty(renderType)) {
                  stringType = renderType;
              }
          }
  
          if (!mStrKeys.containsKey(stringType)) {
              int newType = mTypeId.getAndIncrement();
              mStrKeys.put(stringType, newType);
              mId2Types.put(newType, item.stringType);
              mLayoutManager.getRecyclerView().getRecycledViewPool().setMaxRecycledViews(newType, 20);
          }
          return mStrKeys.get(stringType);
      }
docs: Find itemType for Cell
  
  @param item the cell data
  @return itemType as int used for recycled id