$AppClick 全埋点之代理 Window.Callback

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

内容简介: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


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

查看所有标签

猜你喜欢:

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

算法学

算法学

哈雷尔 / 霍红卫 / 高等教育 / 2007-6 / 39.00元

本书主要论述计算机科学的基本概念、思想、方法和结果。全书内容由 5个部分组成。“预备知识”部分包括算法学中的基本概念、算法结构、算法所操纵的数据以及描述算法所用的程序设计语言。“方法和分析”部分包括算法设计的方法、算法的正确性和效率、评价算法的方法。“局限性和健壮性”部分包括可执行算法的固有局限性以及实现这些算法的计算机的固有局限性、不可计算性和不可判定性、算法学的通用性及其健壮性。此外,还讨论了......一起来看看 《算法学》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具