监听全局Activity 生命周期

在实际开发中我们有些时候需要这样的功能,需要监听所有或这某些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

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

你可能感兴趣的:(监听全局Activity 生命周期)