gpt4 book ai didi

android - "persistent state"与 "current state"

转载 作者:可可西里 更新时间:2023-11-01 19:06:05 30 4
gpt4 key购买 nike

试图决定(针对我的应用程序)在 onPause() 中保存什么以及要保存在 onSaveInstanceState() 中的内容,我梳理了整个 SO 以获得提示和明确的指导方针。

如果我没理解错的话,onSaveInstanceState()最适合保存“运行时更改”或“当前状态”(无论是什么意思),而 onPause()最适合保存“持久状态”(无论这意味着什么)。

我仍然难以决定在我的应用程序中什么构成“持久状态”与“当前状态”。例如,虽然用户偏好显然是持久性的,但当用户更改它们时它们总是由 Android UI 框架自动保存时,我是否需要将它们保存在 onPause() 中?

类数据成员是否需要保存在onSaveInstanceState()中? ?我是否需要为应用程序中的每个 类执行此操作?

我很困惑。

你能举出真实世界的例子来说明什么必须保存在 onPause() 中以及什么必须保存在 onSaveInstanceState() 中吗? Except用于设备配置更改,即。

--

一些新见解,我的问题得到回答后:

最佳答案

您不需要在 onPause 中存储用户首选项,因为正如您所说,框架会为您完成。

要区分持久数据与状态信息,请考虑文本编辑器应用程序。

持久数据

假设用户输入了几个词,然后退出了应用。用户没有明确告诉我们将该数据保存到一个文件中,但是当他们回来时将这些数据存储起来肯定会很好。这是持久数据,您想将其存储在 onPause() 中。

状态数据

同样,假设您有 2 个选项卡和一个跟踪当前选择哪个选项卡的变量。这是您将存储在 onSaveInstanceState() 中的状态数据。

灰质

最后假设您在编辑器中有一个类,用于跟踪编辑器中的字符数和行数。这是状态数据,您可以将其存储在 onSaveInstanceState() 中,或者您可以将其丢弃并在再次启动时重新计算它。是否丢弃它可能取决于计算需要多长时间,例如,如果您可以通过存储数据来阻止网络请求,那么就这样做。

进一步的想法

通过试用您的应用程序,您应该可以清楚地知道是否存在您未能存储正确数据的区域。请务必执行诸如按下主页按钮之类的操作,然后从设备管理器中关闭您的应用程序。这将使您能够解决应用关闭而不是暂停的极端情况。

如果您的界面状态在整个生命周期事件中保持一致并且您的用户数据保持不变,那就太好了。

根据评论编辑

我认为这里有 2 个标准来确定何时/保存什么。

第一个是相当主观的——你到底要不要保存数据?确实没有什么强制您保存状态或数据。保存这些信息会带来更好的用户体验吗?如果您正在写一封电子邮件并尝试从另一个应用程序复制/粘贴文本,那么每次关闭该应用程序时丢失您打一半的电子邮件都会令人沮丧。

第二部分,确定要保存什么取决于您是否可以根据您拥有的数据重建您的 UI 状态。例如,如果您保存了文本数据,那么这一定意味着用户正在编辑文本。所以现在我们知道切换到编辑文本选项卡并填写保存的文本。

一般来说,如果您希望将用户返回到他们离开的相同位置,那么您需要考虑返回到该点所需的状态数据。想象一下您的应用程序的原始加载版本

  • 需要更改哪些数据才能将其转换为用户的最后状态看见了吗?
  • 您需要存储哪些数据才能返回此处?

这就是 android 的实际工作方式,您的 Activity 会被销毁并重新创建,您的工作就是让各个部分再次启动(如果您选择这样做)。

关于android - "persistent state"与 "current state",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11874627/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com