繁体   English   中英

API 28+ 的 onSaveInstanceState 和 onStop 顺序发生变化的原因是什么?

[英]What are the reasons behind the change in the order of onSaveInstanceState and onStop for APIs 28+?

在 API 28 之后onSaveInstanceState()onStop()的执行顺序发生了变化。

参考文档中的本段: 在此处输入图像描述

该更改的原因是能够首先执行片段事务,然后保存 state。 参考文档中的本段:

在此处输入图像描述

  • 这次改动后有什么收获?
  • 这种变化背后还有其他原因吗?

这确实是一个一致性问题,因为方法onStop()仍然可以修改实例 state。
当将onSaveInstanceState()移动到时间线的末尾时,这些更改不会丢失。

虽然我不是谷歌员工,也没有为此做出贡献,但如果我没记错的话,这一变化也会影响活动,我想原因与这样一个事实有关,即在此变化之前,保存 state 的调用是如果/当框架在onPause之后认为有些合适时,可能会发生。

这种行为是非常不可预测的,并且使得生命周期方法不可靠。

随着(Google Devs)对整个FragmentManager及其行为的重构,这种变化很可能是由一致性驱动的。 (也许我不知道我们不熟悉的其他技术细节)。

简而言之,框架现在在调用中是一致的,因为它们保证在onStop之后发生(对于 API 28+),这确保当您重新创建活动/片段时,state 将正确(并保存)。

就像我在开头提到的那样,我不是 Google 开发人员,但以前的方式是一个不确定的集群,而这种变化带来了一些希望,使 Fragment api 从最终消亡中拯救出来。

在这中间的某个时候,使用多个活动不再酷了,我们都想要一个包含许多片段的单个活动,并且导航组件可以无缝地跨堆栈移动(不必担心原始设计中的“缺陷” ),因为这个和许多其他细节在 go 我们在这里的旅程中得到了完善,如果您愿意使用它,可以使用更稳定的 Fragment 平台。

在所有这些“修复”之前,框架 API 容易出现许多错误和不一致,有时会导致运行时崩溃。 我可以想象这个和许多其他修复是如何旨在将这个 API 减少到一个完美的功能特性,以便其他工具(如导航组件、生命周期、视图模型等)都可以和谐地工作,而不必担心“哦,片段是特殊的,需要进一步的逻辑来处理它的错误行为”。

尽管如此,随着越来越多的应用程序开始整合 Jetpack Compose,Fragment 正慢慢开始成为“旧事物”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM