[안드로이드] 현재 실행되는 액티비티 찾기(ActivityLifecycleCallbacks)

안드로이드에서 현재 실행되는 액티비티를 찾는 방법을 알아봤는데 그 중에.. ActivityLifecycleCallbacks가 있더라구요. 실제로 테스트를 해봤는데 동작을 잘 하는 것 같아 간단히 정리합니다.

 

먼저 ActivityLifecycleCallbacks을 사용하기 위해서 Application 클래스가 필요한데 이를 위해 메니페스트에 아래와 같이 <application> 내부에 android:name으로 이름을 지정해줍니다.

 <application
        android:name="MyApplication"
        ...
        >

 

그리고 아래와 같이 Application 클래스를 만들고.. 간단하게 registerActivityLifecycleCallbacks()함수를 통해 콜백을 설정할 수 있습니다. 각각의 콜백에서 인자로 들어오는 activity는 변환없이 context로 바로 사용가능하더라구요 ㅎㅎ

 

이렇게 좋은 콜백이 의외로 잘 안알려진 것 같습니다.

public class MyApplication extends Application {
    final String TAG = MyApplication.class.getName();

    @Override
    public void onCreate() {
        registerActivityLifecycleCallbacks(mActivityLifecycleCallbacks);
    }
    
    ActivityLifecycleCallbacks mActivityLifecycleCallbacks =
            new ActivityLifecycleCallbacks() {

                @Override
                public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {
                    Log.d(TAG, "mActivityLifecycleCallbacks: onActivityCreated("+activity.getLocalClassName()+")");
                }

                @Override
                public void onActivityStarted(@NonNull Activity activity) {
                    Log.d(TAG, "mActivityLifecycleCallbacks: onActivityStarted("+activity.getLocalClassName()+")");
                }

                @Override
                public void onActivityResumed(@NonNull Activity activity) {
                    Log.d(TAG, "mActivityLifecycleCallbacks: onActivityResumed("+activity.getLocalClassName()+")");

                }

                @Override
                public void onActivityPaused(@NonNull Activity activity) {
                    Log.d(TAG, "mActivityLifecycleCallbacks: onActivityPaused("+activity.getLocalClassName()+")");
                }

                @Override
                public void onActivityStopped(@NonNull Activity activity) {
                    Log.d(TAG, "mActivityLifecycleCallbacks: onActivityStopped("+activity.getLocalClassName()+")");
                }

                @Override
                public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {
                    Log.d(TAG, "mActivityLifecycleCallbacks: onActivitySaveInstanceState("+activity.getLocalClassName()+")");
                }

                @Override
                public void onActivityDestroyed(@NonNull Activity activity) {
                    Log.d(TAG, "mActivityLifecycleCallbacks: onActivityDestroyed("+activity.getLocalClassName()+")");
                }
            };
}

 

 

작성자

Posted by 드리머즈

관련 글

댓글 영역