《Android全埋点解决方案》 —2 $AppViewScreen全埋点方案

举报
华章计算机 发表于 2019/12/19 11:43:11 2019/12/19
【摘要】 本节书摘来自华章计算机《Android全埋点解决方案》 一书中第2章,第2.1节,作者是王灼洲 。

第2章

$AppViewScreen全埋点方案

$AppViewScreen事件,即页面浏览事件。在Android系统中,页面浏览其实就是指切换不同的Activity或Fragment(本书暂时只讨论切换Activity的情况)。对于一个 Activity,它的哪个生命周期执行了,代表该页面显示出来了呢?通过对 Activity生命周期的了解可知,其实就是onResume(Activity activity)的回调方法。所以,当一个Activity 执行到onResume(Activity activity)生命周期时,也就代表该页面已经显示出来了,即该页面被浏览了。我们只要自动地在onResume里触发$AppViewScreen事件,即可解决$AppViewScreen事件的全埋点。

2.1 关键技术Application.ActivityLifecycleCallbacks

ActivityLifecycleCallbacks是Application 的一个内部接口,是从 API 14(即Android 4.0)开始提供的。Application 类通过此接口提供了一系列的回调方法,用于让开发者可以对 Activity 的所有生命周期事件进行集中处理(或称监控)。我们可以通过Application类提供的registerActivityLifecycleCallback(ActivityLifecycleCallbacks callback)方法来注册 ActivityLifecycleCallbacks回调。

我们下面先看看Application.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 activity, Bundle outState);

        void onActivityDestroyed(Activity activity);

}

以 Activity的onResume(Activity activity)生命周期为例,如果我们注册了 Activity-LifecycleCallbacks回调,Android 系统会先回调 ActivityLifecycleCallbacks 的 onActivity-Resumed(Activity activity)方法,然后再执行Activity本身的onResume函数(请注意这个调用顺序,因为不同的生命周期的执行顺序略有差异)。通过registerActivityLifecycleCallback 方法名中的“register”字样可以知道,一个 Application 是可以注册多个 ActivityLifecycleCallbacks回调的,我们通过registerActivityLifecycleCallback方法的内部实现也可以证实这一点。

public void registerActivityLifecycleCallbacks(ActivityLifecycleCallbacks callback) {

    synchronized (mActivityLifecycleCallbacks) {

        mActivityLifecycleCallbacks.add(callback);

    }

}

内部定义了一个list用来保存所有已注册的ActivityLifecycleCallbacks。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。