前言
根据《Android Jetpack – Navigation的简单使用》的使用,我们已经知道了Navigation的使用了。
使用Navigation的Fragment的生命周期和FragmentTransaction管理Fragment的存在不一样,因此这里简单记录一下。
正文
PS: 使用Navigation的Fragment切换demo参考前一篇文章《Android Jetpack – Navigation的简单使用》,这里就不多解释了。
我们启动Fragment的顺序如下:
Fragment A --> Fragment B --> Fragment C
使用Navigation
完整日志显示:
A_NavController( 4545): onCreate:
A_NavController( 4545): onCreateView:
A_NavController( 4545): onResume:
A_NavController( 4545): onClick:
B_NavController( 4545): onCreate:
B_NavController( 4545): onCreateView:
B_NavController( 4545): onResume:
A_NavController( 4545): onPause:
A_NavController( 4545): onStop:
C_NavController( 4545): onCreate:
C_NavController( 4545): onCreateView:
C_NavController( 4545): onResume:
B_NavController( 4545): onPause:
B_NavController( 4545): onStop:
点击Back退出应用的打印
Fragment C --> Fragment B --> Fragment A
日志:
B_NavController( 4545): onCreateView:
B_NavController( 4545): onResume:
C_NavController( 4545): onPause:
C_NavController( 4545): onStop:
C_NavController( 4545): onDestroy:
A_NavController( 4545): onCreateView:
A_NavController( 4545): onResume:
B_NavController( 4545): onPause:
B_NavController( 4545): onStop:
B_NavController( 4545): onDestroy:
A_NavController( 4545): onPause:
A_NavController( 4545): onStop:
A_NavController( 4545): onDestroy:
使用Navigation总结如下:
- Navigation管理Fragment类似栈,先进后出
- 切换Fragment时,比如A –> B,B执行完onResume(),A才执行onPause()
- 添加几次Fragment,需要按Back回退多少次才你能退出
- Fragment A –> B 时,A一直存在,不会走销毁流程
使用FragmentTransaction管理Fragment
添加Fragment的代码片段:
public void LoadFragment(Fragment fm) {
if (fm != null && fm != mCurActiveFm) {
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.media_content, fm);
mCurActiveFm = fm;
fragmentTransaction.commitAllowingStateLoss();
}
}
下面是Fragment A–> B 的打印生命周期日志(C的就省略吧)
A_Fragment( 8623): onCreate:
A_Fragment( 8623): onCreateView
A_Fragment( 8623): onResume
B_Fragment( 8623): onCreate:
A_Fragment( 8623): onPause:
A_Fragment( 8623): onDestroy:
B_Fragment( 8623): onCreateView
B_Fragment( 8623): onResume:
A_Fragment( 8623): onCreate:
B_Fragment( 8623): onPause:
B_Fragment( 8623): onDestroy:
A_Fragment( 8623): onCreateView
A_Fragment( 8623): onResume
- FragmentTransaction管理中只存在一个Fragment
- Fragment A — > B时,Fragment A会直接销毁流程。
- Fragment A — > B时 Fragment B先启动onCreate, A再执行onPause(),等B显示后就A就销毁
- 只需要按一次Back就退出应用
参考文章
© 版权声明