Cell复用
1. Cell/View 复用
- NodeBuilder.setReuseIdentifier
- 资源的曝光,指的是该资源本身的曝光,而不是显示该资源的View元素
- 当View/Cell发生复用的时候,如果资源本身没有变化,则不应该触发重复曝光
- VTree中所有节点都有一个identifier,identifier的生成因素:
- _oid: pageId/elementId
- _pos: 资源的位置信息 (详见后续的
position
章节)- impress seq: 标识可以被重新曝光的seq序列 (参见
EventTracing.reExposureView(view)
方法)- 元素本身的id: View的内存地址 / 资源对象的id
- 其中
元素本身的id
是业务方可以操纵的:
- 默认情况下,是使用View的内存地址,大部分场景都适用
- 对于cell复用的场景,推荐使用资源model的内存地址作为id标识,也可使用业务的id来标识
2. 节点的 position
- view/cell 复用场景,需要 s_position 来标识当前这个cell的位置信息,并且位置信息会在
_spm
中体现出来- _spm格式: [_oid[:_pos]],是向上依次查找,然后拼接_oid得到;重要: 一棵虚拟树树中不同的节点的spm是不能相等的!
- 在VTree中,当处于同一个父node名下,两个_oid相同的的节点存在的时候,需要设置 position,不然这俩node的_spm就相同了
- 备注: 在纯SDK层面,position是节点的一个关键配置; 在
ParamBuilder
层面配置的 position,除了会配置节点属性之外,还会给当前节点添加埋点参数s_position
- 对于业务开发人员来说,只需要使用
ParamBuilder
层面的API即可
ParamBuilder.params(view)
.putBIPosition(1)
3. 强制要求一个节点重新曝光
- EventTracing.reExposureView
- 一个UI元素的内容发生了变化,比如一个UI在稳定后,显示的内容变化了,或者状态变化了,该UI组件本身不变,则不会自动重新曝光
- 如果此时策划要求该按钮需要重新曝光,则需要调用该方法标识该节点需要重新曝光
- 调用该方法会造成生成的节点的identifier发生变化,再次生成VTree,则该节点node就会认为跟上一个node不相等
EventTracing.reExposureView(view)