Android 片段的初始回调是在活动onStart()之前还是之后调用的?

Android 片段的初始回调是在活动onStart()之前还是之后调用的?,android,android-lifecycle,Android,Android Lifecycle,显示在activity onStart之前调用片段onatAch、onCreate、on CreateView和onActivityCreated。但是,我尝试记录以下内容: public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { Log.e("TRACE", "MainActiv

显示在activity onStart之前调用片段onatAch、onCreate、on CreateView和onActivityCreated。但是,我尝试记录以下内容:

   public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Log.e("TRACE", "MainActivity onCreate");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Fragment firstFragment = FirstFragment.newInstance();
        getSupportFragmentManager().beginTransaction().replace(R.id.content, firstFragment).commit();
    }

    @Override
    public void onStart() {
        Log.e("TRACE", "MainActivity onStart");
        super.onStart();
    }
FirstFragment如下所示:

public class FirstFragment extends Fragment {

    public FirstFragment() {
        // Required empty public constructor
    }

    public static FirstFragment newInstance() {
        FirstFragment fragment = new FirstFragment();
        return fragment;
    }

    @Override
    public void onAttach(Context context) {
        Log.d("TRACE", "FirstFragment onAttach");
        super.onAttach(context);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        Log.d("TRACE", "FirstFragment onCreate");
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        Log.d("TRACE", "FirstFragment onCreateView");
        return inflater.inflate(R.layout.fragment_first, container, false);
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        Log.d("TRACE", "FirstFragment onActivityCreated");
        super.onActivityCreated(savedInstanceState);
    }
它印了这个:

创建时的主要活动 启动时的主要活动 第一段转速表 创建第一个片段 创建视图的第一个片段 已创建活动的第一个片段 恢复中的主要活动 这取决于如何将片段添加到活动中

向活动添加片段有两种常见方法:通过XML中的标记或通过Java中执行的FragmentTransaction

如果不提供R.id.content视图并使用FragmentTransaction,而是使用如下活动布局创建第一个片段:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <fragment
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.example.stackoverflow.FirstFragment"/>

</LinearLayout>

至于为什么在使用FragmentTransaction时,您会按照看到消息的顺序看到消息,这可以归结为事务是异步的;无法保证在您调用commit时它会立即执行。在您的情况下,系统直到您的活动启动后才真正开始执行它。

该链接与我的链接相同。它声明activitycreated上的片段在activityonstart之前被调用,但我的日志语句显示它被称为afterhank you,它会打印出来。shows onActivityCreated在Activity onStart之前被调用,这是一个错误还是我误解了图表?
E/TRACE   ( 6094): MainActivity onCreate
D/TRACE   ( 6094): FirstFragment onAttach
D/TRACE   ( 6094): FirstFragment onCreate
D/TRACE   ( 6094): FirstFragment onCreateView
E/TRACE   ( 6094): MainActivity onStart
D/TRACE   ( 6094): FirstFragment onActivityCreated
E/TRACE   ( 6094): MainActivity onResume