2.2 原理概述
实现Activity的页面浏览事件,大家首先想到的是定义一个BaseActivity,然后让其他Activity继承这个BaseActivity。这种方法理论上是可行的,但不是最优选择,有些特殊的场景是无法适应的。比如,你在应用程序里集成了一个第三方的库(比如IM相关的),而这个库里恰巧也包含Activity,此时你是无法让这个第三方的库也去继承你的BaseActivity(最起码驱使第三方服务商去做这件事的难度比较大)。所以,为了实现全埋点中的页面浏览事件,最优的方案还是基于我们上面讲的Application.ActivityLifecycleCallbacks。
不过,使用Application.ActivityLifecycleCallbacks机制实现全埋点的页面浏览事件,也有一个明显的缺点,就是注册Application.ActivityLifecycleCallbacks回调要求API 14+。
在应用程序自定义的Application类的onCreate()方法中初始化埋点SDK,并传入当前的Application对象。埋点SDK拿到Application对象之后,通过调用Application的registerActivityLifecycleCallback(ActivityLifecycleCallbacks callback)方法注册Application.ActivityLifecycleCallbacks回调。这样埋点SDK就能对当前应用程序中所有的Activity的生命周期事件进行集中处理(监控)了。在注册的Application.ActivityLifecycleCallbacks的onActivityResumed(Activity activity)回调方法中,我们可以拿到当前正在显示的Activity对象,然后调用SDK的相关接口触发页面浏览事件($AppViewScreen)即可。