Android点击、曝光事件的监听分散在代码的各个角落, 不利于开发维护。
其实可以将这2种行为收敛到一起, 运行时监听Activity的生命周期,即ActivityLifeCallBack回调; 在onResume或onStart函数里判断当前acitivity是否添加了自定义ViewGroup(暂且命名为TrackerViewGroup), 如果未添加则添加;
在onDestory函数中移除该自定义View, 即其父View调用removeView。
一、触发曝光的方法
添加一层ViewGroup目的是监听滑动事件和View显示状态变更; 从而将曝光埋点的触发时机收敛到自定义View中。
1、activity切换前台会执行dispatchWindowFocusChanged函数;
2、手指在屏幕上滑动时dispatchToutchEvent函数里监听ACTION_MOVE, 并触发检索当前视图曝光流程, 每次只曝光差异View(从可见到不可见)并刷新缓存为当前可见view;
3、实现GestureDector的目的是监听Fling行为;
4、当子View变化时,例如ListView/RecyclerView滑入滑出item, 当前视图中的TextView执行setText操作也会触发父容器的onLayout。