Monitor the life cycle changes of Fragment in AppCompatActivity

Foreword

In daily development, it is often necessary to use Fragment. Fragment exists attached to Activity, so how to monitor the life cycle changes of Fragment in Activity?

Scheme

Since Fragment exists attached to Activity, can we register the life cycle callback of Fragment?
The answer is yes, we can realize the life cycle callback of Fragment by registering FragmentManager.FragmentLifecycleCallbacks, which is located in android.support.v4.app.FragmentManager.FragmentLifecycleCallbacks , which is an abstract class.

Explore

Define the specific implementation of FragmentLifecycleCallbacks, rewrite each method, and print the log.

private FragmentManager.FragmentLifecycleCallbacks mFragmentLifecycleCallbacks = new FragmentManager.FragmentLifecycleCallbacks() {
    @Override
    public void onFragmentPreAttached(@NonNull FragmentManager fm, @NonNull Fragment f, @NonNull Context context) {
        super.onFragmentPreAttached(fm, f, context);
        Log.i(TAG, "onFragmentPreAttached: " + f. getClass(). getSimpleName());
    }

    @Override
    public void onFragmentActivityCreated(@NonNull FragmentManager fm, @NonNull Fragment f, @Nullable Bundle savedInstanceState) {
        super.onFragmentActivityCreated(fm, f, savedInstanceState);
        Log.i(TAG, "onFragmentActivityCreated: " + f.getClass().getSimpleName());
    }

    @Override
    public void onFragmentAttached(@NonNull FragmentManager fm, @NonNull Fragment f, @NonNull Context context) {
        super.onFragmentAttached(fm, f, context);
        Log.i(TAG, "onFragmentAttached: " + f. getClass(). getSimpleName());
    }

    @Override
    public void onFragmentPreCreated(@NonNull FragmentManager fm, @NonNull Fragment f, @Nullable Bundle savedInstanceState) {
        super.onFragmentPreCreated(fm, f, savedInstanceState);
        Log.i(TAG, "onFragmentPreCreated: " + f. getClass(). getSimpleName());
    }

    @Override
    public void onFragmentCreated(@NonNull FragmentManager fm, @NonNull Fragment f, @Nullable Bundle savedInstanceState) {
        super.onFragmentCreated(fm, f, savedInstanceState);
        Log.i(TAG, "onFragmentCreated: " + f.getClass().getSimpleName());
    }

    @Override
    public void onFragmentViewCreated(@NonNull FragmentManager fm, @NonNull Fragment f, @NonNull View v, @Nullable Bundle savedInstanceState) {
        super.onFragmentViewCreated(fm, f, v, savedInstanceState);
        Log.i(TAG, "onFragmentViewCreated: " + f.getClass().getSimpleName());
    }

    @Override
    public void onFragmentStarted(@NonNull FragmentManager fm, @NonNull Fragment f) {
        super.onFragmentStarted(fm, f);
        Log.i(TAG, "onFragmentStarted: " + f. getClass(). getSimpleName());
    }

    @Override
    public void onFragmentResumed(@NonNull FragmentManager fm, @NonNull Fragment f) {
        super.onFragmentResumed(fm, f);
        Log.i(TAG, "onFragmentResumed: " + f. getClass(). getSimpleName());
    }

    @Override
    public void onFragmentPaused(@NonNull FragmentManager fm, @NonNull Fragment f) {
        super.onFragmentPaused(fm, f);
        Log.i(TAG, "onFragmentPaused: " + f.getClass().getSimpleName());
    }

    @Override
    public void onFragmentStopped(@NonNull FragmentManager fm, @NonNull Fragment f) {
        super.onFragmentStopped(fm, f);
        Log.i(TAG, "onFragmentStopped: " + f. getClass(). getSimpleName());
    }

    @Override
    public void onFragmentSaveInstanceState(@NonNull FragmentManager fm, @NonNull Fragment f, @NonNull Bundle outState) {
        super.onFragmentSaveInstanceState(fm, f, outState);
        Log.i(TAG, "onFragmentSaveInstanceState: " + f.getClass().getSimpleName());
    }

    @Override
    public void onFragmentViewDestroyed(@NonNull FragmentManager fm, @NonNull Fragment f) {
        super.onFragmentViewDestroyed(fm, f);
        Log.i(TAG, "onFragmentViewDestroyed: " + f.getClass().getSimpleName());
    }

    @Override
    public void onFragmentDestroyed(@NonNull FragmentManager fm, @NonNull Fragment f) {
        super.onFragmentDestroyed(fm, f);
        Log.i(TAG, "onFragmentDestroyed: " + f. getClass(). getSimpleName());
    }

    @Override
    public void onFragmentDetached(@NonNull FragmentManager fm, @NonNull Fragment f) {
        super.onFragmentDetached(fm, f);
        Log.i(TAG, "onFragmentDetached: " + f.getClass().getSimpleName());
    }
};

Register listener when Activity is created

getSupportFragmentManager().registerFragmentLifecycleCallbacks(mFragmentLifecycleCallbacks,true);

Logout listener when Activity is destroyed

getSupportFragmentManager().unregisterFragmentLifecycleCallbacks(mFragmentLifecycleCallbacks);

Actual combat

Here we enter the Activity and register the listener, we add two Fragments, and observe the output changes of the log.

DataReportActivity: onFragmentPreAttached: TitleFrag
DataReportActivity: onFragmentAttached: TitleFrag
DataReportActivity: onFragmentPreCreated: TitleFrag
DataReportActivity: onFragmentCreated: TitleFrag
DataReportActivity: onFragmentViewCreated: TitleFrag
DataReportActivity: onFragmentActivityCreated: TitleFrag
DataReportActivity: onFragmentPreAttached: DataReportFarg
DataReportActivity: onFragmentAttached: DataReportFarg
DataReportActivity: onFragmentPreCreated: DataReportFarg
DataReportActivity: onFragmentCreated: DataReportFarg
DataReportActivity: onFragmentViewCreated: DataReportFarg
DataReportActivity: onFragmentActivityCreated: DataReportFarg
DataReportActivity: onFragmentStarted: TitleFrag
DataReportActivity: onFragmentStarted: DataReportFarg
DataReportActivity: onFragmentResumed: TitleFrag
DataReportActivity: onFragmentResumed: DataReportFarg

When we close the Activity, observe the output changes of the log

DataReportActivity: onFragmentPaused: TitleFrag
DataReportActivity: onFragmentPaused: DataReportFarg
DataReportActivity: onFragmentStopped: TitleFrag
DataReportActivity: onFragmentStopped: DataReportFarg
DataReportActivity: onFragmentDestroyed: TitleFrag
DataReportActivity: onFragmentDetached: TitleFrag
DataReportActivity: onFragmentViewDestroyed: DataReportFarg
DataReportActivity: onFragmentDestroyed: DataReportFarg
DataReportActivity: onFragmentDetached: DataReportFarg

By Carlos Lynn
Link: https://www.jianshu.com/p/fb3d95a54135
Source: Jianshu
Copyright belongs to the author. For commercial reprint, please contact the author for authorization, for non-commercial reprint, please indicate the source.