上一个Demo, 版本配置:
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "com.pudutech.fragmenttest"
minSdkVersion 27
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
//运行版本:27
MainActivity:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
replaceFragment(FirstFragment())
switch_fragment_btn.setOnClickListener {
replaceFragment(SecondFragment())
}
}
private fun replaceFragment(fragment: Fragment) {
FragmentUtils.replace(
supportFragmentManager,
fragment,
R.id.fragment_container
)
}
FragmentUtils.replace方法最终调用
SupportFragmentManager.replace(@IdRes int containerViewId, @NonNull Fragment fragment,
@Nullable String tag)
SupportFragmentManager.addToBackStack(@Nullable String name)
SupportFragmentManager.commitAllowingStateLoss()
结果如下:
进入首页
2020-03-17 11:37:29.945 5005-5005/com.pudutech.fragmenttest D/FirstFragment: onCreate
2020-03-17 11:37:29.946 5005-5005/com.pudutech.fragmenttest D/FirstFragment: onCreateView
2020-03-17 11:37:29.949 5005-5005/com.pudutech.fragmenttest D/FirstFragment: onViewCreated
2020-03-17 11:37:29.949 5005-5005/com.pudutech.fragmenttest D/FirstFragment: onActivityCreated
2020-03-17 11:37:29.950 5005-5005/com.pudutech.fragmenttest D/FirstFragment: onStart
2020-03-17 11:37:29.956 5005-5005/com.pudutech.fragmenttest D/FirstFragment: onResume
切换fragment
2020-03-17 11:37:48.576 5005-5005/com.pudutech.fragmenttest D/SecondFragment: onCreate
2020-03-17 11:37:48.577 5005-5005/com.pudutech.fragmenttest D/FirstFragment: onPause
2020-03-17 11:37:48.577 5005-5005/com.pudutech.fragmenttest D/FirstFragment: onStop
2020-03-17 11:37:48.577 5005-5005/com.pudutech.fragmenttest D/FirstFragment: onDestroyView
2020-03-17 11:37:48.578 5005-5005/com.pudutech.fragmenttest D/SecondFragment: onCreateView
2020-03-17 11:37:48.579 5005-5005/com.pudutech.fragmenttest D/SecondFragment: onViewCreated
2020-03-17 11:37:48.579 5005-5005/com.pudutech.fragmenttest D/SecondFragment: onActivityCreated
2020-03-17 11:37:48.580 5005-5005/com.pudutech.fragmenttest D/SecondFragment: onStart
2020-03-17 11:37:48.580 5005-5005/com.pudutech.fragmenttest D/SecondFragment: onResume
按back键
2020-03-17 11:38:05.537 5005-5005/com.pudutech.fragmenttest D/SecondFragment: onPause
2020-03-17 11:38:05.537 5005-5005/com.pudutech.fragmenttest D/SecondFragment: onStop
2020-03-17 11:38:05.537 5005-5005/com.pudutech.fragmenttest D/SecondFragment: onDestroyView
2020-03-17 11:38:05.538 5005-5005/com.pudutech.fragmenttest D/SecondFragment: onDestroy
2020-03-17 11:38:05.539 5005-5005/com.pudutech.fragmenttest D/FirstFragment: onCreateView
2020-03-17 11:38:05.540 5005-5005/com.pudutech.fragmenttest D/FirstFragment: onViewCreated
2020-03-17 11:38:05.540 5005-5005/com.pudutech.fragmenttest D/FirstFragment: onActivityCreated
2020-03-17 11:38:05.540 5005-5005/com.pudutech.fragmenttest D/FirstFragment: onStart
2020-03-17 11:38:05.540 5005-5005/com.pudutech.fragmenttest D/FirstFragment: onResume
再次点击back(未退出app,需要再点击才退出)
2020-03-17 11:40:43.215 5143-5143/com.pudutech.fragmenttest D/FirstFragment: onPause
2020-03-17 11:40:43.215 5143-5143/com.pudutech.fragmenttest D/FirstFragment: onStop
2020-03-17 11:40:43.215 5143-5143/com.pudutech.fragmenttest D/FirstFragment: onDestroyView
2020-03-17 11:40:43.216 5143-5143/com.pudutech.fragmenttest D/FirstFragment: onDestroy
修改代码,去掉addToBackStack的调用。 结果如下:
进入首页
2020-03-17 11:48:09.866 5669-5669/com.pudutech.fragmenttest D/FirstFragment: onCreate
2020-03-17 11:48:09.867 5669-5669/com.pudutech.fragmenttest D/FirstFragment: onCreateView
2020-03-17 11:48:09.867 5669-5669/com.pudutech.fragmenttest D/FirstFragment: onViewCreated
2020-03-17 11:48:09.868 5669-5669/com.pudutech.fragmenttest D/FirstFragment: onActivityCreated
2020-03-17 11:48:09.868 5669-5669/com.pudutech.fragmenttest D/FirstFragment: onStart
2020-03-17 11:48:09.873 5669-5669/com.pudutech.fragmenttest D/FirstFragment: onResume
切换fragment
2020-03-17 11:48:14.885 5669-5669/com.pudutech.fragmenttest D/SecondFragment: onCreate
2020-03-17 11:48:14.886 5669-5669/com.pudutech.fragmenttest D/FirstFragment: onPause
2020-03-17 11:48:14.886 5669-5669/com.pudutech.fragmenttest D/FirstFragment: onStop
2020-03-17 11:48:14.887 5669-5669/com.pudutech.fragmenttest D/FirstFragment: onDestroyView
2020-03-17 11:48:14.889 5669-5669/com.pudutech.fragmenttest D/FirstFragment: onDestroy
2020-03-17 11:48:14.890 5669-5669/com.pudutech.fragmenttest D/SecondFragment: onCreateView
2020-03-17 11:48:14.893 5669-5669/com.pudutech.fragmenttest D/SecondFragment: onViewCreated
2020-03-17 11:48:14.893 5669-5669/com.pudutech.fragmenttest D/SecondFragment: onActivityCreated
2020-03-17 11:48:14.893 5669-5669/com.pudutech.fragmenttest D/SecondFragment: onStart
2020-03-17 11:48:14.894 5669-5669/com.pudutech.fragmenttest D/SecondFragment: onResume
点击back键(直接退出app)
2020-03-17 11:48:35.654 5669-5669/com.pudutech.fragmenttest D/SecondFragment: onPause
2020-03-17 11:48:36.202 5669-5669/com.pudutech.fragmenttest D/SecondFragment: onStop
2020-03-17 11:48:36.204 5669-5669/com.pudutech.fragmenttest D/SecondFragment: onDestroyView
2020-03-17 11:48:36.208 5669-5669/com.pudutech.fragmenttest D/SecondFragment: onDestroy
另外,亮灭屏时候fragment的生命周期方法调用顺序为:
2020-03-17 11:58:09.614 8731-8731/com.pudutech.fragmenttest D/SecondFragment: onPause
2020-03-17 11:58:09.651 8731-8731/com.pudutech.fragmenttest D/SecondFragment: onStop
2020-03-17 11:58:12.708 8731-8731/com.pudutech.fragmenttest D/SecondFragment: onStart
2020-03-17 11:58:12.712 8731-8731/com.pudutech.fragmenttest D/SecondFragment: onResume