安卓JetPack篇——LifeCycle原理

LifeCycle

一、什么是Lifecycle

具备宿主生命周期感知能力的组件。它能持有组件(如Activity或Fragment)生命周期状态的信息,并且允许其他观察者监听宿主的状态。

二、基本原理

1、安卓10以下版本

隐形的Fragment注入在LifecycleOwner(宿主页面)中,当Fragment感知到宿主生命周期变化时,通知LifecycleRegister进行状态修改,然后LifecycleRegister通知LifecycleObserver进行具体的操作。

2、安卓10以上版本

不再需要隐形Fragment,直接使用系统回调(lifecyclecallback)

三、五大金刚

1、ReportFragment:隐形fragment,同步感知activity的声明周期变化,通知给LifecycleRegister(被宿主LifecycleOwner持有)

2、LifecycleRegister:Lifecycle 的具体实现类,更新状态并通知观察者。

3、LifecycleObserver:观察生命周期变化的接口

4、LifecycleOwner:生命周期的持有页面。

5、Lifecycle:定义生命周期状态和事件的抽象接口。

四、为什么Deportment可以感知宿主Activity的生命周期

Android 系统保证 Fragment 的生命周期方法100% 同步宿主 Activity。

public class ReportFragment extends Fragment {
    // ✅ 1. 注入到 Activity
    public static void injectIfNeededIn(Activity activity) {
        if (Build.VERSION.SDK_INT >= 29) {
            // Android 10+ 使用更高效的 API
            LifecycleCallbacks.registerIn(activity);
        }
        // 添加透明 Fragment(兼容旧版本)
        android.app.FragmentManager manager = activity.getFragmentManager();
        if (manager.findFragmentByTag(REPORT_FRAGMENT_TAG) == null) {
            manager.beginTransaction()
                .add(new ReportFragment(), REPORT_FRAGMENT_TAG)
                .commit();
            manager.executePendingTransactions();
        }
    }

    // ✅ 2. 生命周期同步方法(核心)
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        dispatch(Lifecycle.Event.ON_CREATE);
    }

    @Override
    public void onStart() {
        super.onStart();
        dispatch(Lifecycle.Event.ON_START);
    }

    @Override
    public void onResume() {
        super.onResume();
        dispatch(Lifecycle.Event.ON_RESUME);
    }

    @Override
    public void onPause() {
        super.onPause();
        dispatch(Lifecycle.Event.ON_PAUSE);
    }

    @Override
    public void onStop() {
        super.onStop();
        dispatch(Lifecycle.Event.ON_STOP);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        dispatch(Lifecycle.Event.ON_DESTROY);
    }

    // ✅ 3. 事件分发核心方法
    private void dispatch(Lifecycle.Event event) {
        if (Build.VERSION.SDK_INT < 29) {
            // 仅旧版本需要 ReportFragment 分发事件
            dispatch(getActivity(), event);
        }
    }

    // ⚡ 实际分发逻辑(静态方法可独立调用)
    public static void dispatch(Activity activity, Lifecycle.Event event) {
        if (activity instanceof LifecycleOwner) {
            Lifecycle lifecycle = ((LifecycleOwner) activity).getLifecycle();
            if (lifecycle instanceof LifecycleRegistry) {
                ((LifecycleRegistry) lifecycle).handleLifecycleEvent(event);
            }
        }
    }

    // ✅ 4. Android 10+ 的优化实现
    @RequiresApi(29)
    static class LifecycleCallbacks implements Application.ActivityLifecycleCallbacks {
        static void registerIn(Activity activity) {
            activity.registerActivityLifecycleCallbacks(new LifecycleCallbacks());
        }

        @Override
        public void onActivityCreated(@NonNull Activity activity, Bundle bundle) {
            ReportFragment.dispatch(activity, Lifecycle.Event.ON_CREATE);
        }

        @Override
        public void onActivityStarted(@NonNull Activity activity) {
            ReportFragment.dispatch(activity, Lifecycle.Event.ON_START);
        }

        @Override
        public void onActivityResumed(@NonNull Activity activity) {
            ReportFragment.dispatch(activity, Lifecycle.Event.ON_RESUME);
        }

        @Override
        public void onActivityPaused(@NonNull Activity activity) {
            ReportFragment.dispatch(activity, Lifecycle.Event.ON_PAUSE);
        }

        @Override
        public void onActivityStopped(@NonNull Activity activity) {
            ReportFragment.dispatch(activity, Lifecycle.Event.ON_STOP);
        }

        @Override
        public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle bundle) {
            // 不处理
        }

        @Override
        public void onActivityDestroyed(@NonNull Activity activity) {
            ReportFragment.dispatch(activity, Lifecycle.Event.ON_DESTROY);
        }
    }
}

参考文章:

【Android: 彻底搞懂Lifcycle——原理篇 - CSDN App】https://blog.csdn.net/sange77/article/details/125131212?sharetype=blogdetail&shareId=125131212&sharerefer=APP&sharesource=y515278178&sharefrom=link

你可能感兴趣的:(Android,android,android,jetpack)