2012/01/14

アプリ内の全Activityのライフサイクルコールバックメソッドを検知する方法

ApplicationクラスにはActivityLifecycleCallbacksというインタフェースが
用意されています。
参考:Android Developerサイト

これを利用することでアプリケーション内にあるActivityのライフサイクル
メソッドのコールバックを検知することができます。

下記サンプルコートです。

public class TestApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        registerActivityLifecycleCallbacks(new ActivityLifeCycleListener());
    }
   
    private static class ActivityLifeCycleListener implements ActivityLifecycleCallbacks {
        @Override
        public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
            android.util.Log.e("yuki", "yuki call onCreated:" + activity);
        }
        @Override
        public void onActivityStarted(Activity activity) {}
        @Override
        public void onActivityResumed(Activity activity) {
            android.util.Log.e("yuki", "yuki call onResumed:" + activity);
        }
        @Override
        public void onActivitySaveInstanceState(Activity activity, Bundle outState) {}
        @Override
        public void onActivityPaused(Activity activity) {
            android.util.Log.e("yuki", "yuki call onPaused:" + activity);}
        @Override
        public void onActivityStopped(Activity activity) {}
        @Override
        public void onActivityDestroyed(Activity activity) {}
    }
}
このアプリに内包されているTestApplication2Activityを起動→終了した場合
のログは下記になります。

E/yuki(687): yuki call onCreated:test.yuki.TestApplication2Activity@4136e050
E/yuki(687): yuki call onResumed:test.yuki.TestApplication2Activity@4136e050
E/yuki(687): yuki call onPaused:test.yuki.TestApplication2Activity@4136e050

コールバックで渡されてくる引数ActivityからどのActivityかを判断するのは
instanceofやマーカーインターフェースを利用て判定できるでしょう。
またActivityのライフサイクルで共通の処理を実装する場合や、Activityを
一元管理したい場合にも便利です。

以上です。