$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


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

查看所有标签

猜你喜欢:

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

一胜九败

一胜九败

柳井正 / 徐静波 / 中信出版社 / 2011-1-19 / 28.00元

优衣库成长的过程,就是一个历经了无数次失败的过程。他们经历过无法从银行融资的焦灼,经历过“衣服因低价热销,但人们买回去之后立即把商标剪掉”的难堪,经历过为上市冲刺而拼命扩张店铺的疯狂,也经历过被消费者冷落、疏离的苦痛……但正是从这些失败中学到的经验与教训,让柳井正走向了成功。 《一胜九败:优衣库风靡全球的秘密》就像是柳井正的错误集,在这里,他毫不隐晦地将公司业绩低迷的原因、进军海外失败的因素......一起来看看 《一胜九败》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

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

UNIX 时间戳转换