$代理Window.Callback全埋点方案
是Window.Callback是Window类的一个内部接口。当Window接收到外界状态改变的通知,就会回调其中的相应方法。比如,当用户点击某个控件时,就会回调Window.Callback中的dispatchTouchEvent(MontionEvent event)方法。
在应用程序自定义的Application的onCreate()方法中初始化埋点SDK,并传入当前的Application对象。埋点SDK在拿到这个Application对象之后,就可以调用Application的registerActivityLifecycleCallback方法来注册Application.ActivityLifecycleCallbacks回调。这样,埋点SDK就能对应程序中所有的Activity的生命周期事件进行集中处理(监控)了。
案例:
第一步,新建一个项目(Project) 在新建的空项目中,会自动包含一个主module,即app。
第二步,创建sdk module 新建一个Android Library module,名称sdk
第三步,添加依赖关系 app module需要依赖sdk module。可以通过修改app/build.gradle文件,在其dependencies节点中添加依赖关系。
第四步,编写埋点sdk 在sdk module中我们新建一个埋点sdk主类,即SensorsDataAPI.java。
第五步,注册ActivityLifecycleCallbacks回调 通过调用埋点SDK的内部私有类SensorsDataPrivate.java的registerActivityLifecycleCallbacks(Application application)方法来注册ActivityLifecycleCallbacks回调的
第六步,通过MotionEvent找到那个被点击的view对象。包含了当前点击事件的详细信息。
第七步,初始化埋点SDK 在app module中新建MyApplication.java类,该类继承Application,然后在onCreate方法中初始化sdk。
第八步,配置MyApplication 最后,在AndroidManifest.xml文件的application节点中配置我们上一步自定义的MyApplication。
至此,基于代理Window.callback的全埋点方案就算完成了。
扩展1 支持采集RatingBar的点击事件
扩展2 支持采集SeekBar的点击事件
扩展3 支持采集Spinner的点击事件
扩展4 支持采集ListView GridView的点击事件
扩展5 支持采集ExpandableListView点击事件
缺点:由于每次点击时,都需要遍历一次RootView,所以效率相对来说比较低,对应用程序的整体性能影响也比较大。