答案 0 :(得分:21)
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计划的错误修复或改进。
似乎Fragment
和FragmentActivity
中的代码已被重构,以使Loaders成为可选的依赖项。
根据the release note,新实施基于Lifecycle
。
在Support Library 26.1.0中,Fragment
和FragmentActivity
已采用Lifecycle
。
这是一个将支持库与Architecture Components的Lifecycles集成的特殊版本。如果您没有使用Lifecycles库,则无需从26.0.2更新。有关更多信息,请参阅Architecture Components发行说明。
重要更改
- Fragment和FragmentActivity(AppCompatActivity的基类)现在实现了Architecture Components的LifecycleOwner接口。
相比之下,Android P中的Fragment和Activity尚未实现接口LifecycleOwner
。
在the Google+ post(ThanosFisherman’s answer中提及)中,Ian发表了评论:
您发布后无法更改框架代码 - 它实际上已经冻结了。这意味着没有新功能,更重要的是没有错误修复。这不是一个好的开发人员体验,特别是当我们在支持库中拥有完全支持的,最新的,向后兼容的版本时。
我认为这就是为什么Android P不采用Lifecycle
的原因。因此,在Android P中不推荐使用Fragment
。
答案 1 :(得分:6)
支持图书馆碎片将继续存在。 Google鼓励您使用支持库版本来获取所有API级别的一致行为,向后移植的错误修复以及Lifecycle和ViewModel支持。
答案 2 :(得分:1)
万一有人在寻找通过类名实例化片段的方法。
旧方法:
Fragment.instantiate(context, fragmentClass)
新方法:
val fm: FragmentManager = ...
fm.fragmentFactory.instantiate(ClassLoader.getSystemClassLoader(), fragmentClass)
答案 3 :(得分:0)
使用 supportFragmentManager 代替 Android x 中的 fragmentManager 。