阅读 183

MVVMSmart系列文章--Jetpack的Navigation中Fragment的生命周期

Navigation是google推荐的应用内导航方式,数据aac架构组件儿,那其中的Fragment导航的时候生命周期是怎么样的呢?

博文代码:在MVVMSmart项目中,下载地址:github.com/wzqjava/MVV… 基于谷歌最新AAC架构,MVVM设计模式的一套快速开发库,整合ViewModel+Lifecycles+Navigation+DataBinding+LilveData+Okhttp+Retrofit+RxJava+Glide等主流模块,满足日常开发需求。使用该框架可以快速开发高质量、易维护的Android应用.

MVVMSmart中这个界面点击任何一个功能

HomeFragment中,点击不同的功能,导航到不同的fragment, 看博客要看懂思路即可, 书上得来终觉浅,绝知此事要躬行, 要想清楚如何使用和更高级用法,请下载代码自己查看,才能做到掌握.

  • MVVMsmart地址:github.com/wzqjava/MVV…
  • 分支名称:MVVMSmart-kotlin(切换分支,readme会自动切换成对应语言)
  • 分支名称:MVVMSmart-java(切换分支,readme会自动切换成对应语言)
  1. 先看下正常的Fragment生命周期

  1. navigation中有个LetterContactListFragment联系人列表,标题栏中有写信按钮,当我们点击标题栏中写信导航到LetterWriteFragment(写信界面 ),然后点击返回 我们来观察下生命周期的变化;

  2. 启动LetterContactListFragment,看日志,图中是我打印的当前Fragment中的ViewModel的内存地址,因为页面跳走再回来,生命周期变化会影响ViewModel的创建.这里大家先注意一下. 生命周期执行了

  • OnAttach
  • OnCreate
  • OnCreateView
  • OnViewCreated(非生命周期,但经常用)
  • OnActivityCreated
  • OnStart
  • OnResume
  1. 当我们点击标题栏写信按钮后,navigation导航到写信界面,这个时候联系人列表的生命周期日志请看图

生命周期执行了

  • OnPause
  • OnStop
  • OnDestroyView 大家看到了吧, 视图销毁了,但并没有执行OnDestory和OnDeatach;
  1. 当我们点击返回键,再次出现联系人列表,我们看生命周期

生命周期执行了

  • OnCreateView
  • OnViewCreated
  • OnActivityCreated
  • OnStart
  • OnResume

6 总结,navigation导航Fragment的时候销毁了View,但并没有把整个Fragment销毁.

重点:核心重点,大家请仔细看,视图重建,但其中的VeiwModel内存地址还是同一个,也就是说ViewModel被成功保存了,其中的数据也保存了,navigation导航要比activity跳转开销小好多倍,性能也好,也很方便的在导航文件中添加各种跳转动画.

书上得来终觉浅,绝知此事要躬行, 要想清楚如何使用和更高级用法,请下载代码自己查看,才能做到掌握.框架中用到了所有jetpack技术,MVVM架构,您的Star是我前进的动力,希望我的辛苦,帮到了你. github.com/wzqjava/MVV…

请您思考下,onViewCreated被反复执行了,我们里面的加载请求数据逻辑,请求的时候弹出加载框等等, 那么当我们每次点返回键都会去请求数据,都会弹出加载框怎么解决呢,这个问题我再公司解决了一天,因为我在框架封装了带状态的LiveData,livedata添加监听会受到回调,问题综合一起后,就复杂起来,如今我彻底弄清楚了,下篇文章给您解读.