[안드로이드] 현재 실행되는 액티비티 찾기(ActivityLifecycleCallbacks)
프로그래밍/안드로이드2020. 5. 16. 11:47
안드로이드에서 현재 실행되는 액티비티를 찾는 방법을 알아봤는데 그 중에.. 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()+")");
}
};
}
댓글 영역