Android 奇怪的活动生命周期。

Android 奇怪的活动生命周期。,android,Android,当我第一次从主活动启动活动时,它会经过onCreate()然后onStart()。在应用程序中,如果我关闭屏幕,它将转到onPause(),在那里我保存一些数据。然后立即转到onStop(),然后转到onDestroy(),然后再次转到onCreate(),onStart(),onPause(),而不打开屏幕。 是否应该在onDestroy()之后立即转到onCreate()、onStart(),而我不做任何操作 @Override protected void onCreate(Bundle

当我第一次从主活动启动活动时,它会经过onCreate()然后onStart()。在应用程序中,如果我关闭屏幕,它将转到onPause(),在那里我保存一些数据。然后立即转到onStop(),然后转到onDestroy(),然后再次转到onCreate(),onStart(),onPause(),而不打开屏幕。 是否应该在onDestroy()之后立即转到onCreate()、onStart(),而我不做任何操作

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_timegame);

}

@Override
protected void onResume() {
    super.onStart();
    if (checkFirstTimeRun())
        initializeGame();
    else
        resumeGame();
}

@Override
protected void onPause() {
    super.onPause();
    saveGameData();
}

简短的解释(
考虑到您没有使用片段)

  • 活动的创建是
    OnCreate
    OnStart
    OnResume
  • 当您再次旋转屏幕时,
    OnPause
    OnStop
    OnDestroy
    OnCreate
    OnStart
    OnResume
    ,因为活动在方向更改时被销毁并重新创建
因此,如果在创建时不旋转
OnCreate
OnStart
OnResume
将不会第二次触发


了解执行哪些事件以及何时执行:


一个用例示例(
考虑到您正在使用片段):
示例项目

我有一个开源项目,并执行它,查看日志以了解>事件序列一个接一个地执行(我在这个项目中也有片段,如果您不需要它,请排除>片段日志)

项目观察
  • 如果路径为
    Activity
    -
    FragmentOne
    ,并且第一次更改方向,则触发的事件如下
    main活动onCreate
    -
    FragmentOne-onAttach
    -
    FragmentOne onCreate
    -
    FragmentOne onCreateView
    -
    activitycreated上的FragmentOne
    -
    FragmentOne启动
    -
    FragmentOne-onResume

  • 如果路径为
    Activity
    -
    FragmentOne
    -
    orientationchange
    并首次更改方向,则触发的事件如下

main活动onCreate
-
FragmentOne-onAttach
-
FragmentOne onCreate
-
FragmentOne onCreateView
-
activitycreated上的FragmentOne
-
FragmentOne启动
-
FragmentOne-onResume
-
FragmentOne onPause
-
FragmentOne onSaveInstanceState
-
FragmentOne在顶部
-
FragmentOne onDestroy
-
FragmentOne onDetach
-
main活动onCreate
-
FragmentOne-onAttach
-
FragmentOne onCreate
-
FragmentOne onCreateView
-
activitycreated上的FragmentOne
-
FragmentOne启动
-
FragmentOne-onResume

  • 如果路径为
    Activity
    -
    FragmentOne
    -
    orientationchange
    -
    orientationchange
    ,并第一次更改方向,则触发的事件如下
main活动onCreate
-
FragmentOne-onAttach
-
FragmentOne onCreate
-
FragmentOne onCreateView
-
activitycreated上的FragmentOne
-
FragmentOne启动
-
FragmentOne-onResume
-
FragmentOne onPause
-
FragmentOne onSaveInstanceState
-
FragmentOne在顶部
-
FragmentOne onDestroy
-
FragmentOne onDetach
-
main活动onCreate
-
FragmentOne-onAttach
-
FragmentOne onCreate
-
FragmentOne onCreateView
-
activitycreated上的FragmentOne
-
FragmentOne启动
-
FragmentOne-onResume
-
FragmentOne onPause
-
FragmentOne onSaveInstanceState
-
FragmentOne在顶部
-
FragmentOne onDestroy
-
FragmentOne onDetach
-
main活动onCreate
-
FragmentOne-onAttach
-
FragmentOne onCreate
-
FragmentOne onCreateView
-
activitycreated上的FragmentOne
-
FragmentOne启动
-
FragmentOne-onResume

  • 如果路径是
    Activity
    -
    FragmentOne
    -
    orientationchange
    -
    orientationchange
    -
    FragmentTwo
    并第一次更改方向,则触发的事件如下
main活动onCreate
-
FragmentOne-onAttach
-
FragmentOne onCreate
-
FragmentOne onCreateView
-
activitycreated上的FragmentOne
-
FragmentOne启动
-
FragmentOne-onResume
-
FragmentOne onPause
-
FragmentOne onSaveInstanceState
-
FragmentOne在顶部
-
FragmentOne onDestroy
-
FragmentOne onDetach
-
main活动onCreate
-
FragmentOne-onAttach
-
FragmentOne onCreate
-
FragmentOne onCreateView
-
activitycreated上的FragmentOne
-
FragmentOne启动
-
FragmentOne-onResume
-
FragmentOne onPause
-
FragmentOne onSaveInstanceState
-
FragmentOne在顶部
-
FragmentOne onDestroy
-
FragmentOne onDetach
-
main活动onCreate
-
FragmentOne-onAttach
-
FragmentOne onCreate
-
FragmentOne onCreateView
-
activitycreated上的FragmentOne
-
FragmentOne启动
-
FragmentOne-onResume
-
FragmentOne在顶部
-
FragmentOne-onAttach
-
FragmentOne onCreate
-
FragmentOne onCreateView
-
FragmentTwo-onActivityCreated
-
FragmentOne启动
-
FragmentOne-onResume

  • 如果路径是
    Activity
    -
    FragmentOne
    -
    orientationchange
    -
    orientationchange
    -
    FragmentTwo
    -