在实际开发中我们有些时候需要这样的功能,需要监听所有或这某些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循环便利调用注册的监听方法。