Android Jetpack - Navigation的Fragment生命周期

广告也精彩

前言

根据《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总结如下:

  1. Navigation管理Fragment类似栈,先进后出
  2. 切换Fragment时,比如A --> B,B执行完onResume(),A才执行onPause()
  3. 添加几次Fragment,需要按Back回退多少次才你能退出
  4. 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
  1. FragmentTransaction管理中只存在一个Fragment
  2. Fragment A -- > B时,Fragment A会直接销毁流程。
  3. Fragment A -- > B时 Fragment B先启动onCreate, A再执行onPause(),等B显示后就A就销毁
  4. 只需要按一次Back就退出应用

参考文章

  1. Android Jetpack - Navigation的简单使用

广告也精彩
版权声明:125la.com站长 发表于 2021年12月6日 下午7:12。
转载请注明:Android Jetpack - Navigation的Fragment生命周期 | 125啦读书导航

相关文章

广告也精彩

暂无评论

暂无评论...