安卓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. 注入到 Activitypublic static void injectIfNeededIn(Activity activity) {if (Build.VERSION.SDK_INT >= 29) {// Android 10+ 使用更高效的 APILifecycleCallbacks.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. 生命周期同步方法(核心)@Overridepublic void onActivityCreated(Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState);dispatch(Lifecycle.Event.ON_CREATE);}@Overridepublic void onStart() {super.onStart();dispatch(Lifecycle.Event.ON_START);}@Overridepublic void onResume() {super.onResume();dispatch(Lifecycle.Event.ON_RESUME);}@Overridepublic void onPause() {super.onPause();dispatch(Lifecycle.Event.ON_PAUSE);}@Overridepublic void onStop() {super.onStop();dispatch(Lifecycle.Event.ON_STOP);}@Overridepublic 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());}@Overridepublic void onActivityCreated(@NonNull Activity activity, Bundle bundle) {ReportFragment.dispatch(activity, Lifecycle.Event.ON_CREATE);}@Overridepublic void onActivityStarted(@NonNull Activity activity) {ReportFragment.dispatch(activity, Lifecycle.Event.ON_START);}@Overridepublic void onActivityResumed(@NonNull Activity activity) {ReportFragment.dispatch(activity, Lifecycle.Event.ON_RESUME);}@Overridepublic void onActivityPaused(@NonNull Activity activity) {ReportFragment.dispatch(activity, Lifecycle.Event.ON_PAUSE);}@Overridepublic void onActivityStopped(@NonNull Activity activity) {ReportFragment.dispatch(activity, Lifecycle.Event.ON_STOP);}@Overridepublic void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle bundle) {// 不处理}@Overridepublic 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