神策View级别曝光埋点库源码分析

* SAExposedProcess中在addExposureView的时候,为每个Activity,保存了一个ExposedPage的映射到mExposedPageWeakHashMap中

* ExposedTransform监听Activity级别的生命周期,并从ViewTreeObserver中添加和删除AppPageChange,以及通知SAExposedProcess.CallBack中的onActivityResumed和onActivityPaused事件

* AppPageChange是监听焦点、绘制、滚动等事件的,用于通知SAExposedProcess.CallBack中的viewLayoutChange事件

* 最终SAExposedProcess.CallBack的三种事件,都通知给SAExposedProcess

* SAExposedProcess中通过onActivityResumed和viewLayoutChange事件驱动(View可见事件),通过SAExposedProcess.ExposureRunnable,为该Activity对应的ExposedPage中的所有当前新曝光的ExposureView,遍历地创建StayDurationRunnable用于上报曝光事件,并设置ExposureView.isLastVisible(true)(上次可见)和ExposureView.setExposed(true)(本次曝光已上报)

* SAExposedProcess中通过onActivityPaused事件驱动,为该Activity对应的ExposedPage中的所有ExposureView,遍历地调用ExposureView.setLastVisible(false)(上次不可见)

* ExposedPage的getExposureViewList方法中的viewIsExposed方法,判断某个ExposureView是否新曝光,是在ExposedPage持有的ExposureVisible中判断View.getLocalVisibleRect返回true,并且Rect面积大等View的面积,并且exposureView.isLastVisible()为false(上次不可见),并且exposureView.isExposed()为false(本次未上报曝光)
Share

You may also like...

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注