您不需要在 onPause 中存储用户首选项,因为正如您所说,框架会为您执行此操作。
要区分持久数据与状态信息,请考虑一个文本编辑器应用程序。
持久数据
假设用户输入了几个单词,然后退出了应用程序。用户没有明确告诉我们将这些数据保存到文件中,但是当他们回来时将这些数据存储起来肯定会很好。这是持久数据,您希望将其存储在 onPause() 中。
状态数据
同样,假设您有 2 个选项卡和一个跟踪当前选择的选项卡的变量。这是您将存储在 onSaveInstanceState() 中的状态数据。
灰质
最后假设您在编辑器中有一个类,用于跟踪编辑器中的字符数和行数。这是状态数据,您可以将其存储在 onSaveInstanceState() 中,也可以将其丢弃并在重新启动时重新计算。是否丢弃它可能取决于计算需要多长时间,例如,如果您可以通过存储数据来阻止网络请求,那么就这样做。
进一步的想法
通过使用您的应用程序,您应该很明显是否有一个区域您未能存储正确的数据。请务必执行诸如点击主页按钮然后从设备管理器中关闭您的应用程序之类的操作。这将让您遇到应用程序关闭而不是暂停的极端情况。
如果您的 UI 状态在整个生命周期事件中保持一致并且您的用户数据仍然存在,那么做得很好。
根据评论编辑
我认为这里有两条标准来确定何时/保存什么。
第一个是相当主观的——你想保存数据吗?确实没有什么可以强迫您保存状态或数据。保存这些信息会带来更好的用户体验吗?如果您正在编写电子邮件并尝试从另一个应用程序复制/粘贴文本,那么每次应用程序关闭时丢失您输入一半的电子邮件会令人沮丧。
第二部分,确定要保存的内容取决于您是否可以根据您拥有的数据重建您的 UI 状态。例如,如果您保存了文本数据,那么这一定意味着用户正在编辑文本。所以现在我们知道切换到编辑文本选项卡并填写保存的文本。
一般来说,如果您希望将用户返回到他们离开的地方,那么您需要考虑返回该点所需的状态数据。想象一下您的应用程序的原始加载版本
- 需要更改哪些数据才能将其变为用户看到的最后状态?
- 您需要存储哪些数据才能返回这里?
这确实是 android 的工作方式,您的活动被销毁并重新创建,您的工作是再次启动这些部分(如果您选择这样做)。