简体   繁体   中英

Activity onStart() being called before Fragment's onActivityCreated()

I'm having an issue where my fragment's onActivityCreated() method is being called after my activity's onStart() method is called. This seems to imply that my activity's onCreate() method is finishing after onStart() ? That can't be the case ... Can it? When in my activity's lifecycle is my fragment's onActivityCreated() called? Furthermore, if I have multiple fragments, how can I control the order of the fragments' onActivityCreated() calls?

In my activity:

@Override
protected void onStart() {
    super.onStart();
    methodA(); // this is called ...
}

In my fragment:

    @Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    methodB(); // ... before this
}

onActivityCreated() method is being called after my activity's onStart() method is called

Remember that onActivityCreated() method just a callback for the fragment from activity.

This seems to imply that my activity's onCreate() method is finishing after onStart()? That can't be the case ... can it?

Wrong! Activity and fragment is separate, So onCreated() method in Activity and onActivityCreated() method in fragment could not be the same. As above, in Fragment it's just a callback mapping with activity state.

Let's have a look at this picture to have a better understanding. 在此输入图像描述

In Official document from Google: Activity onStart()

Called just before the activity becomes visible to the user. Followed by onResume() if the activity comes to the foreground, or onStop() if it becomes hidden.

Fragment callback: onActivityCreated()

Called when the fragment's activity has been created and this fragment's view hierarchy instantiated. It can be used to do final initialization once these pieces are in place, such as retrieving views or restoring state. It is also useful for fragments that use setRetainInstance(boolean) to retain their instance, as this callback tells the fragment when it is fully associated with the new activity instance. This is called after onCreateView(LayoutInflater, ViewGroup, Bundle) and before onViewStateRestored(Bundle).

The last one:

Furthermore, if I have multiple fragments, how can I control the order of the fragments' onActivityCreated() calls?

It's depend on which way you use to add your fragments to activity. Basically the order will be the order of added fragments.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM