$AppViewScreen 事件,即页面浏览事件。在 Android 系统中,页面浏览,其实就是指切换不同的 Activity。那对于一个 Activity,哪个生命周期执行了代表该页面显示出来了呢?通过对 Activity 的生命周期了解可知,其实就是 onResume 生命周期。

Application.ActivityLifecycle- Callbacks

ActivityLifecycleCallbacks 是 Application 的一个内部接口,从 API 14 开始提供的。Application 通过此接口提供了一套回调方法,用于让开发者可以对 Activity 的所有生命周期事件进行集中处理(或者叫监控)。可以通过 application.registerActivityLifecycleCallback 注册 ActivityLifecycleCallbacks。

Application.ActivityLifecycleCallbacks 接口定义如下:

public interface ActivityLifecycleCallbacks {
void onActivityCreated(Activity activity, Bundle savedInstanceState);
void onActivityStarted(Activity activity);
void onActivityResumed(Activity activity);
void onActivityPaused(Activity activity);
void onActivityStopped(Activity activity);
void onActivitySaveInstanceState(Activity activ- ity, Bundle outState);
} void onActivityDestroyed(Activity activity);

以 onResume(Activity activity) 为 例,如 果 注 册 了 ActivityLifecycleCallbacks,Android 系 统 会 先 回 调 ActivityLifecycleCallbacks 的 onActivityResumed 方 法, 然后再执行 Activity 本身的 onResume 函数 ( 请注意这个 调 用 顺 序 ) 。通 过 registerActivityLifecycleCallback 方 法名中的“register”字样可以知道,一个 Application 是 可 以 register 多 个 ActivityLifecycleCallbacks 的,通 过 registerActivityLifecycleCallback 的内部实现也可以证实这一点。

public void registerActivityLifecycleCallbacks (ActivityLifecycleCallbacks callback) {
{ synchronized (mActivityLifecycleCallbacks) back); mActivityLifecycleCallbacks.add(call- }}

原理概述

在应用程序自定义的 Application 对象的 onCreate() 方法中初始化埋点 SDK, 并传入当前的 Application 对象。SDK 拿到 Application 对象之后,通过 registerActivityLifecycleCallback 方法注册 Application.ActivityLifecycleCall- backs。这样 SDK 就能对 App 中所有的 Activity 的生命周期事件进行集中处理 (监控)了。在注册的 Application.ActivityLifecycleCallbacks 的 onActivityRe- sumed 回调方法中,我们可以拿到当前正在显示的Activity对象,然后调用 SDK 的相关接口触发页面浏览事件即($AppViewScreen)。

实现步骤

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

缺点

注册 Application.ActivityLifecycleCallbacks 要求 API 14+ 。

知识点

Application.ActivityLifecycleCallbacks

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

更多白皮书、报告、干货和案例,可以关注“神策数据”和“用户行为洞察研究院”公众号了解~