Android - 生命周期和保存实例状态问题

2023-11-27

因此,我的应用程序中有一个用于创建新用户的表单,其中包含有关用户的相关详细信息和信息。那里没有问题,这只是用户在没有按下确认按钮的情况下离开活动时发生的情况。

这就是我想做的:

  1. 如果用户按下后退按钮,则尝试将所有数据保存到数据库并通知用户。
  2. 如果活动被中断(即被电话中断),请将所有数据保存到临时位置,以便当活动再次位于堆栈顶部时,似乎没有任何变化(但数据仍然尚未保存)到数据库)。
  3. 如果该 Activity 在后台被杀死以获取更多资源,请执行与上面第 2 点相同的操作(即,当该 Activity 再次启动时,似乎没有任何变化)。
  4. 如果再次启动整个应用程序(通过再次单击该图标)并且存储了上述第 2 点或第 3 点中的临时数据,请导航到“创建用户”活动并显示数据,就好像没有发生任何更改一样。

我目前正在尝试这样做:

  • Use onDestroy() and isFinishing()函数来查找 Activity 何时被终止,以覆盖上面的第 1 点(然后尝试保存所有数据)。
  • 保存所有数据onSaveInstanceState捆绑在一起(覆盖上面的第 2 点)
  • 创建的捆绑包是否为onSaveInstanceState在被杀死以获得更多资源的活动中幸存下来,因此当重新创建它时可以检索以前的状态(如上面的第 3 点)?
  • 不知道如何实现第4点。

任何帮助将不胜感激。

Cheers!


我时间有限,所以无法给出完整详细的答案,但简而言之,这是我的建议。

  • 而不是使用onDestroy(), use onPause()。那肯定会被调用;根据 Lifecycles 的官方文档,仅保证 onPause() 。 onStop 和 onDestroy 不是。
  • onSaveInstanceState 和 onPause 类似。当应用程序离开前台时(即,它进入被杀死的潜在危险区域),两者都会被调用,但与 oSIS 的区别在于它提供的临时捆绑包。 onPause 不提供任何数据存储机制,但如果您使用数据库,那么您已经拥有一个。根据文档,没有保证首先调用的顺序。
  • 第 3 点)这正是 oSIS 的用途
  • 第 4 点)您可以在数据库中创建一个“临时行”,即将临时数据保存到第 1 行,但只要正确保存,第 1 行就会被清空。然后在 onCreate() 中,检查第 1 行是否有真实数据或为空。 (如果您的列不能为空,则使用在正常使用过程中不会出现的预先确定的占位符值。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android - 生命周期和保存实例状态问题 的相关文章

随机推荐