美文网首页
监听全局Activity 生命周期

监听全局Activity 生命周期

作者: mm_cuckoo | 来源:发表于2017-04-14 13:05 被阅读500次

    在实际开发中我们有些时候需要这样的功能,需要监听所有或这某些Activity 的生命周期,其实实现这个功能很简单,下面几步让你实现这个功能。

    实现步骤

    实现监听就两步:
    1. 创建监听类
    2. 注册监听类

    下面从源码介绍一下实现

    实现 ActivityLifecycleCallbacks 接口

    ActivityLifecycleCallbacks 接口没什么好说的,接口内都是Activity 的生命周期方法。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);
        }
    

    创建继承 Application 的实体类(这个类你懂得)

    下面要看一下 Application 中的一个方法,没有这个方法是万万不行的,

    • public void registerOnProvideAssistDataListener(OnProvideAssistDataListener callback)
        public void registerActivityLifecycleCallbacks(ActivityLifecycleCallbacks callback) {
            synchronized (mActivityLifecycleCallbacks) {
                mActivityLifecycleCallbacks.add(callback);
            }
        }
    
    • public void unregisterOnProvideAssistDataListener(OnProvideAssistDataListener callback)
        public void unregisterActivityLifecycleCallbacks(ActivityLifecycleCallbacks callback) {
            synchronized (mActivityLifecycleCallbacks) {
                mActivityLifecycleCallbacks.remove(callback);
            }
        }
    

    这两个方法在Application 中,下面是实现,从实现中我们注意到 mActivityLifecycleCallbacks 这样一个变量,这个变量是存放注册的监听,这个变量在又在什么时候被调用呢,看一下Application 中的源码就会看到一些如下类型的代码:

    /* package */ void dispatchActivityCreated(Activity activity, Bundle savedInstanceState) {
            Object[] callbacks = collectActivityLifecycleCallbacks();
            if (callbacks != null) {
                for (int i=0; i<callbacks.length; i++) {
                    ((ActivityLifecycleCallbacks)callbacks[i]).onActivityCreated(activity,
                            savedInstanceState);
                }
            }
        }
    

    上面只贴出了Activity 中的一个生命周期方法的调用方式,代码不多,就是通过for循环便利调用注册的监听方法。

    相关文章

      网友评论

          本文标题:监听全局Activity 生命周期

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