因此一直以来,Fragment 处于一种很尴尬的地位,API 难用、坑不少、生命周期难管理,因此当初有人提出 Activity 应该采起单 Activity + 多 Fragment 的结构开发时,不少人都持否认态度,不过最近 Google Play 也改为了这种结构,平常使用体验也还好。框架
不过自从 Android 平板上夭折以后,Fragment 的做用愈来愈向一个微型 Activity 发展,Activity 有什么方法 Fragment 中就要对应添加什么方法,发向 Activity 的事件回调也要向 Fragment 中发一遍。最初的想法是想 Fragment 解决 Activity 页面臃肿以及不灵活的问题,可是没想到现在 Fragment 变成了 Activity。测试
针对目前存在的问题,官方提出了从新设计 Fragment 的计划,并提出了如下两个目标:优化
将 Fragment 迁移到一个聚焦 API 层面的世界,并具备可预见、完善的表现。动画
兼容目前的功能spa
在将来的某个时间的,Google 会发布 Fragment 2.0,会添加一些新的 API 供你们使用,因此做为开发者的咱们,须要密切关注正在使用的 Fragment API 中哪些被打上了弃用的标签,由于在 Fragment 2.0 发布以后,这些 API 会逐步变得不可用。设计
在目前的 1.1.0 版本中,还提供了 FragmentFactory 帮助咱们自定义 Fragment 的实例化。以前咱们可能会有一个疑问:为何 Fragment 须要使用 setArguments 来传递参数,而不能够直接从 Fragment 的构造方法传递参数?答案很简单,会数据丢失。3d
由于例如当咱们反转屏幕的时候,Activity 会销毁重建,当前 Activity 持有的 Fragment 会经过 FragmentManager 重建,但 FragmentManager 只会调用 Fragment 默认的构造方法重建,因此咱们经过自定义构造方法传递的参数就会丢失。cdn
如今咱们能够经过 FragmentFactory 来自定义的实例化,就能够避免上述问题的发生。blog
自定义 FragmentFactory 以后,须要在 onCreate 以前给 FragmentManager 提早赋值。生命周期
在 Fragment 1.2.0 版本中,增长来新的 FragmentContainerView 来替代以前使用的 和 标签。FragmentContainerView 在 Fragmnet 出现、消失的动画上面增长了 Z 轴上的效果。
增长了 OnBackPressedDispatcher 来帮助咱们在 Fragmnet 中更好的处理返回事件。 还有一些优化方面的更新,在 Fragment 中更方便的实例化不一样做用域的 viewModel,例如仅 Fragment、所有 Navigation 做用域、Activity 做用域。同时在 FragmentPagerAdapter 中增长了 BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT 属性,表示只有当前 Fragment 能够走到 onResume,这样一来咱们作 ViewPager 多个 Fragment 懒加载是就方便了不少。最后官方还指望能够整合 Fragment 和 Fragment‘s View 的生命周期,提供更方便的状态管理。
其实在我看来以前 Fragment 之因此难用,是由于当时设计它的缘由是基于平板模式所设计的,现在 Google 移除来 support 引入来全新的 AndroidX,将主要 API 的更新脱离 Android 版本的更新,势必会加快 API 的更新迭代速度,向着更快、更方便的开发体验前进,并且我也预感 Android 会在将来 1-2 年内会有重大的变化和突破,能够提供给用户媲美 iOS 的使用体验。因此抓紧上车,学就对了!
明天周末暂停更新,下周一咱们继续为你们分享 Android Dev Summit 中有趣的内容!没关注的小伙伴记得关注我以及个人公众号【Android丨Kotlin】!若是以为这些文章有点意思,记得分享转发评论点赞鸭!
我是 wanbo 你们加油!