美文网首页
介绍一种监视全局Activity生命周期的方法

介绍一种监视全局Activity生命周期的方法

作者: 超级绿茶 | 来源:发表于2019-12-15 16:27 被阅读0次

以前想要对全部Activity的生命周期进行监控的通常作法是自定义一个BaseActivity,在这个类里面重写所有的生命周期方法,然后让所有的Activity都继承BaseActivity。不过最近才发现从Android API 28开始出现了一个Application类有了一个新的方法:registerActivityLifecycleCallbacks。方法定义如下:

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

    public void unregisterActivityLifecycleCallbacks(ActivityLifecycleCallbacks callback) {
        synchronized (mActivityLifecycleCallbacks) {
            mActivityLifecycleCallbacks.remove(callback);
        }
    }

看源码就知道,registerActivityLifecycleCallbacks是用于注册生命周期监听的,而unregisterActivityLifecycleCallbacks自然就是用于注销监听的销。用法也很简单:

        registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks {
            override fun onActivityPaused(activity: Activity?) {
                Log.i("123", activity?.localClassName + " onActivityPaused")
            }

            override fun onActivityResumed(activity: Activity?) {
                Log.i("123", activity?.localClassName + " onActivityResumed")
            }

            override fun onActivityStarted(activity: Activity?) {
                Log.i("123", activity?.localClassName + " onActivityStarted")
            }

            override fun onActivityDestroyed(activity: Activity?) {
                Log.i("123", activity?.localClassName + " onActivityDestroyed")
            }

            override fun onActivitySaveInstanceState(activity: Activity?, outState: Bundle?) {
                Log.i("123", activity?.localClassName + " onActivitySaveInstanceState")
            }

            override fun onActivityStopped(activity: Activity?) {
                Log.i("123", activity?.localClassName + " onActivityStopped")
            }

            override fun onActivityCreated(activity: Activity?, savedInstanceState: Bundle?) {
                Log.i("123", activity?.localClassName + " onActivityCreated")
            }

        })

上面的示例中在每个Activity的生命周期中都打印了一条Log语句。这时你可能会有个想法,如果我在自己指定的Activity的生命周期中也有代码,比如:都在onStart周期中插入了Log,那么全局的和局部的,哪个先执行?

    override fun onStart() {
        Log.i("123","onStart in actvitiy 1")
        super.onStart()
        Log.i("123","onStart in actvitiy 2")
    }

运行结果如下:


QQ截图20191215162138.png

可以看出全局的是通过父类的同名生命周期方法执行的。所以有了registerActivityLifecycleCallbacks后再做项目埋点时的时候又多了一种新的方法。

点击链接加入群聊【口袋里的安卓】:https://jq.qq.com/?_wv=1027&k=5z4fzdT
或关注微信公众号:

相关文章

  • 介绍一种监视全局Activity生命周期的方法

    以前想要对全部Activity的生命周期进行监控的通常作法是自定义一个BaseActivity,在这个类里面重写所...

  • Activity的生命周期的七个场景

    简单介绍Activity生命周期经常调用的几个方法: onCreate()与onDestroy()Activity...

  • Activity

    1、生命周期 基本方法介绍: 可以看出Activity的完整生命周期是onCreate -> onStart ->...

  • Android — Activity

    Activity 什么是 Activity? 7个方法 三个阶段 生命周期: 通过全局变量传递数据 通过剪切板传递...

  • Activity和Fragment的生命周期

    Activity的生命周期方法 Activity一共有以下7个生命周期方法: Fragment的生命周期方法 Fr...

  • Activity的生命周期

    一.Activity的方法的介绍 onCreate : 该方法是在Activity被创建时回调,它是生命周期第一个...

  • Android Activity、Fragment的生命周期

    一. Activity的生命周期 下面先上Activity的生命周期图: 1.Activity生命周期方法: (1...

  • 01.Android之基础组件问题

    目录介绍 1.0.0.1 说下Activity的生命周期?屏幕旋转时生命周期?异常条件会调用什么方法? 1.0.0...

  • Android基础知识总结

    Activity 先附上图(来自官方文档) 生命周期方法介绍: onCreate作为Activity的第一个生命周...

  • activity生命周期

    1.正常情况下的activity的生命周期 activity的基本生命周期的方法就不逐一介绍了,其中有两个方法需要...

网友评论

      本文标题:介绍一种监视全局Activity生命周期的方法

      本文链接:https://www.haomeiwen.com/subject/kzdknctx.html