ate*_*iob 14 android application-state activity-lifecycle onpause android-activity
试图决定(对于我的应用程序)在onPause()中保存什么以及在onSaveInstanceState()中保存什么,我梳理了整个SO以获取提示和明确的指导.
如果我理解正确,onSaveInstanceState()最适合保存"运行时更改"或"当前状态"(无论这意味着什么),而onPause()最适合保存"持久状态"(无论这意味着什么).
我仍然难以确定我的申请中的内容构成"持久状态"与"当前状态".例如,虽然用户偏好显然是持久的,但是onPause()
当用户更改它们时,Android UI框架总是自动保存它们时是否需要保存它们?
类数据成员是否需要保存在onSaveInstanceState()中?我是否需要为我的应用程序中的每个类执行此操作?
我很迷惑.
你能带来真实世界的例子,说明必须保存的内容onPause()
和必须保存的内容onSaveInstanceState()
吗?除了设备配置更改,即.
-
在我的问题得到解答后,一些新的见解:
您不需要在onPause中存储用户首选项,因为正如您所说,框架会为您执行此操作.
要区分持久数据和状态信息,请考虑文本编辑器应用程序.
持久数据
假设用户输入了几个单词然后退出应用程序.用户没有明确地告诉我们将这些数据保存到文件中,但是当它们返回时,确保存储这些数据肯定会很好.这是持久数据,您希望将其存储在onPause()中.
州数据
同样,假设您有2个选项卡和一个跟踪当前选中哪个选项卡的变量.这是您存储在onSaveInstanceState()中的状态数据.
灰质
最后想象一下,编辑器中有一个类可以跟踪编辑器中的字符数和行数.这是状态数据,您可以将其存储在onSaveInstanceState()中,或者您可以将其丢弃并在重新启动时重新计算它.是否将其丢弃可能取决于计算所需的时间,例如,如果您可以通过存储数据来阻止网络请求,请执行此操作.
进一步的想法
通过玩你的应用程序,很明显,如果有一个区域你没有松开正确的数据.确保执行诸如点击主页按钮之类的操作,然后从设备管理器中关闭您的应用程序.这样您就可以在应用程序关闭而非暂停的情况下遇到问题.
如果您的UI状态在生命周期事件中保持一致,并且您的用户数据仍然存在,那就很好了
根据评论进行编辑
我认为这里有两条标准来确定何时/保存什么.
第一个是非常主观的 - 你想要保存数据吗?真的没有什么可以强迫你保存状态或数据.保存这些信息会带来更好的用户体验吗?如果您正在撰写电子邮件并尝试从其他应用程序复制/粘贴文本,则每次关闭应用程序时丢失您输入的半封电子邮件都会令人沮丧.
第二部分,确定要保存的内容取决于您是否可以根据您拥有的数据重建UI状态.例如,如果您保存了文本数据,则必须表示用户正在编辑文本.现在我们知道切换到编辑文本选项卡并填写保存的文本.
一般来说,如果您希望将用户返回到他们中断的相同位置,那么您需要考虑返回到该点所需的状态数据.想象一下你的应用程序的原始加载版本
这实际上是android如何工作,你的活动被破坏和重新创建,你的工作是再次设置运动(如果你选择这样做).
这是答案.您可以通过三种不同的方式保存状态.
1)子类应用程序(不是一个好主意).2)SharedPreferences(适用于简单数据,快速可靠)3)SQLite数据库(更复杂,也更可靠).
现在回答你的问题.Android确实没有任何保证.在任何时候它都可以并且可能会破坏您的应用程序,而不会在它之前调用任何特定的功能.因此,如果存在对保存至关重要的数据,答案就是在您获得后立即保存.如果您知道自己需要立即保存的东西,以后保存某些东西通常没什么好处.
onSaveInstanceState()仅用于保存与布局或方向更改相关的临时变量.
综上所述持久状态/数据(应该生存崩溃),应保存尽快,不要等待onPause()
,因为没有保证.这就是现实.
归档时间: |
|
查看次数: |
6204 次 |
最近记录: |