51信用卡 Android 自动埋点实践(1)

本文介绍了在Android应用中如何通过生成页面ID和控件ID追踪PV和UV指标,利用Activity和Fragment的生命周期回调,以及如何优化控件ID以应对UI变化。此外,还探讨了使用DSL来扩展埋点信息的可能,提供了一套完整的埋点管理和学习资源路线图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有了页面的唯一 ID 生成的规则,我们只需要在页面曝光的时候,生成这个 ID,然后上传即可实现页面的 PV、UV 指标。至于页面曝光的时机,在 Android 开发中很容易可以找到,因为对于 Activity 和 Fragment 而言都有标准的生命周期。针对业务中 PV、UV 的定义,我们可以将 Activity 的 onResume() 方法,Fragment 的 onResume()setUserVisibleHint(boolean isVisibleToUser)onHiddenChanged(boolean hidden) 方法作为曝光时机,在上述方法被回调时,调用 SDK 埋点方法,生成 ID 然后上传埋点。

  • Activity

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • Fragment

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

控件ID规则

相对于页面而言,控件的 ID 定义规则要更加复杂。起初我们会想到用『R.id』,在编译时 Android aapt 会给每个写在 xml 里的控件生成一个唯一 ID,但是从 aapt 的生成规则来看,这个 ID 并不是固定不变的,在资源文件发生变化的时候,id 也可能会出现变化,也就是不同版本的相同控件的 ID 是有可能不同的。根据 ID 需要具备的『唯一性』和『稳定性』来看,这个 ID 具备『唯一性』,但『稳定性』非常差,因此这个方案不可行。

紧接着我们想到,每个界面所有的控件根据其父子关系可以绘制出页面的视图树,从控件本身出发,根据控件的类名加上其所处层级的位置等特征信息,并逐级的向上遍历,直至找到根节点位置,这样我们就能得到一个控件在该视图树中的一个控件路径;反过来说,根据这个控件路径,我们就能在这个视图树中唯一确定一个控件。下图是一个简单的 ViewTree 模型:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

根据上文所述控件路径生成规则,对于 Button 而言,其路径为:FrameLayout[0]/LinearLayout[1]/Button[0],在一个页面中,这个路径就可以帮我们唯一定位到这个 Button,但是对于不同的页面而言,还是存在不同的控件相同的路径的情况,因此控件 ID 的生成规则应为:『页面 ID: 控件路径』。

上文页面 ID 的生成规则中我们说到,对于 Android 来说,页面有 Activity 和 Fragment 两种,因为一个 Activity 可以包含不同的 Fragment,所以控件如果是存在于 Fragment 中的,则页面 ID 需要为其所在的 Fragment 的页面 ID,如果不在 Fragment 中,则包含 Activity 的页面 ID 即可,那么如何能够从控件本身的实例获取到其所在的 Activity 或者 Fragment。对于 Activity 而言比较简单,我们可以通过如下代码实现:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对于 Fragment 则相对比较麻烦,我们只能事先将 Fragment 对应的页面 ID 和控件本身绑定,即通过打 tag 的方式,在 Fragment 的 OnViewCreated 方法中,拿到 Fragment 容器中的根 View,并打上 Fragment 的页面 ID,然后遍历该 View,为其所有的子控件都打上标记,核心代码如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以当我们拿到一个 View 的实例时,我们先看是否能拿到这个 tag 对应的页面 ID,如果拿不到再去找其所属的 Activity,然后得到页面 ID,随后根据它本身的控件路径,拼凑出控件的 ID,核心代码如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值