Android P中不推荐使用碎片

时间:2018-03-23 09:36:23

标签: android android-fragments android-9.0-pie

我正在查看documentation并找到了这个

  

此类已在API级别P中弃用。

为什么在Android P中不推荐使用片段?

4 个答案:

答案 0 :(得分:21)

支持库27.1.0中的重写

Ian's medium post(2018年2月28日)给我们一个解释。他是Google的Android Framework开发人员。

  

支持库27.1.0中的加载程序

     

对于支持库27.1.0,我重写了LoaderManager的内部,这是为Loaders API提供支持的类,我想解释这些更改背后的原因以及未来的发展方向。

     

装载机和碎片,历史
  从一开始,装载机和碎片就紧紧地绑在一起。这意味着FragmentActivity和Fragment中的很多代码都支持Loaders,尽管确实存在相当独立的代码。 ...

     

27.1.0中有什么变化
  随着27.1.0,装载机的技术债务大大减少:......

     

...

     

注意:显然,这些更改仅适用于支持库加载程序。如果您使用的是Android框架加载器,请尽快切换到支持库加载器。没有针对框架Loader API计划的错误修复或改进。

似乎FragmentFragmentActivity中的代码已被重构,以使Loaders成为可选的依赖项。

根据the release note,新实施基于Lifecycle

  

重要更改
  Loaders的基础实现已被重写为使用Lifecycle

架构组件

Support Library 26.1.0中,FragmentFragmentActivity已采用Lifecycle

  

这是一个将支持库与Architecture Components的Lifecycles集成的特殊版本。如果您没有使用Lifecycles库,则无需从26.0.2更新。有关更多信息,请参阅Architecture Components发行说明。

     

重要更改

     
      
  • Fragment和FragmentActivity(AppCompatActivity的基类)现在实现了Architecture Components的LifecycleOwner接口。
  •   

相比之下,Android P中的FragmentActivity尚未实现接口LifecycleOwner

the Google+ postThanosFisherman’s answer中提及)中,Ian发表了评论:

  

您发布后无法更改框架代码 - 它实际上已经冻结了。这意味着没有新功能,更重要的是没有错误修复。这不是一个好的开发人员体验,特别是当我们在支持库中拥有完全支持的,最新的,向后兼容的版本时。

我认为这就是为什么Android P不采用Lifecycle的原因。因此,在Android P中不推荐使用Fragment

答案 1 :(得分:6)

支持图书馆碎片将继续存在。 Google鼓励您使用支持库版本来获取所有API级别的一致行为,向后移植的错误修复以及Lifecycle和ViewModel支持。

https://plus.google.com/+IanLake/posts/WAGQiG7LaKs

答案 2 :(得分:1)

万一有人在寻找通过类名实例化片段的方法。

旧方法:
Fragment.instantiate(context, fragmentClass)

新方法:

val fm: FragmentManager = ...
fm.fragmentFactory.instantiate(ClassLoader.getSystemClassLoader(), fragmentClass)

答案 3 :(得分:0)

使用 supportFragmentManager 代替 Android x 中的 fragmentManager