$AppClick 全埋点之代理 Window.Callback

栏目: IOS · Android · 发布时间: 6年前

内容简介:Window.Callback 是 Window 的 一 个 内 部 接 口。该 接 口 包 含 了 一 系 列 的 类 似 于 dispatchXXX 和 onXXX 的接口。当 Window 接收到外界的状态改变通知时就会回调其 中的相应方法。比如,当用户点击某个控件时,就会回调 Window.Callback 中的 dispatchTouchEvent(MotionEvent event) 方法。Window.Callback 定义如下:

$AppClick 全埋点之代理 Window.Callback

Window.Callback

Window.Callback 是 Window 的 一 个 内 部 接 口。该 接 口 包 含 了 一 系 列 的 类 似 于 dispatchXXX 和 onXXX 的接口。当 Window 接收到外界的状态改变通知时就会回调其 中的相应方法。比如,当用户点击某个控件时,就会回调 Window.Callback 中的 dispatchTouchEvent(MotionEvent event) 方法。

Window.Callback 定义如下:

/**

* API from a Window back to its caller. This allows the client to

* intercept key dispatching, panels and menus, etc.

/

public interface Callback {

……

*

* Called to process touch screen events. At the very least your

* implementation must call

* {@link android.view.Window#superDispatchTouchEvent} to do the

* standard touch screen processing.

*

* @param event The touch screen event.

*

* @return boolean Return true if this event was consumed.

*/

public boolean dispatchTouchEvent(MotionEvent event);

……

}

关于 Window.callback 更详细的信息,可以参考如下链接: http://www.android-doc.com/reference/android/view/Window.Callback.html 15 数据驱动白皮书 Android 全埋点技术白皮书

原理概述

在应用程序自定义的 Application 的 onCreate() 方法中初始化埋点 SDK,并传入当前的 Application 对象。SDK 在拿到这个 Application 对象之后,通过 application.register- ActivityLifecycleCallback 注册 Application.ActivityLifecycleCallbacks。这样 SDK 就能对 App 中所有的 Activity 的生命周期事件进行集中处理(监控)了。在 ActivityLife- cycleCallbacks 的 onActivityCreated(Activity activity, Bundle bundle) 回调 方法中,我们就可以拿到当前正在显示的 Activity 对象,通过 activity.getWindow() 方法可以拿到这个 Activity 对应的 Window 对象,再通过 window.getCallback() 方法就可以拿到 Window.Callback 对象,最后通过自定义的 WrapperWindowCallback 代理这个 Window.Callback 对象。然后在 WrapperWindowCallback 的 dispatchTouchEvent (MotionEvent event) 方法中通过 MotionEvent 参数找到那个被点击的 View,插入埋点代码,最后再调用 原有 Window.Callback 的 dispatchTouchEvent(MotionEvent event) 方法,即可达到自动埋点的效果。

实现步骤

完整的项目源码后续会 release 给大家。

缺点

• 由于每次点击触发时,都需要遍历一次 RootView,所以效率比较低,对 App 整体性 能影响比较大

• view.hasOnClickListeners() 要求 API 15+

• Application.ActivityLifecycleCallbacks 要求 API 14+

• 无法采集 Dialog、PopupWindow 的点击事件

知识点

• Window.callback

• Application.ActivityLifecycleCallbacks

• ViewTreeObserver.OnGlobalLayoutListener

• 代理

参考资料

[1] https://github.com/hellozhixue/BehaviorCollect

注:该内容来自神策数据用户行为洞察研究院出品的《Android 全埋点解决方案》白皮书,查看完整白皮书可点击 《Android 全埋点解决方案》

更多白皮书、报告、干货和案例,可以关注“神策数据”和“用户行为洞察研究院”公众号了解~ $AppClick 全埋点之代理 Window.Callback


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

大转换

大转换

尼古拉斯·卡尔 / 闫鲜宁、张付国 / 中信 / 2016-2 / 49

1、我们这个时代最清醒的思考者之一尼古拉斯·卡尔继《浅薄》《玻璃笼子》之后又一重磅力作。 2、在这部跨越历史、经济和技术领域的著作中,作者从廉价的电力运营方式对社会变革的深刻影响延伸到互联网对我们生活的这个世界的重构性影响。 3、《快公司》《金融时报》《华尔街日报》联袂推荐 简介 早在2003年,尼古拉斯·卡尔先生发表在《哈佛商业评论》上的一篇文章——IT Doesn't ......一起来看看 《大转换》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

随机密码生成器
随机密码生成器

多种字符组合密码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码