6

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

这是我想要做的:

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

这是我目前正在尝试的方式:

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

任何帮助将不胜感激。

干杯!

4

2 回答 2

4

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

  • 而不是使用onDestroy(),使用onPause()。保证会被调用;根据 Lifecycles 的官方文档,只有 onPause() 是有保证的。onStop 和 onDestroy 不是。
  • onSaveInstanceState 和 onPause 类似。当应用程序离开前台时(即它进入被杀死的潜在危险区域),两者都会被调用,但与 oSIS 的区别在于它提供的临时捆绑包。onPause 不提供任何数据存储机制,但如果您使用的是数据库,那么您已经拥有一个。根据文档,第一个被调用的顺序并没有保证。
  • 第 3 点)这正是 oSIS 的意义所在
  • 第 4 点)您可以在数据库中创建一个“临时行”,即将临时数据保存到第 1 行,但只要正确保存,第 1 行就会空白。然后在您的 onCreate() 中,检查第 1 行是否有真实数据或为空。(如果您的列不能为空,则使用在正常使用中不会出现的预先确定的占位符值。)
于 2010-04-20T17:12:18.120 回答
1

我建议你创建一个统一的机制来保存临时状态。您可以使用Android 参考建议的任何机制而不是 Bundle

于 2010-04-20T17:12:33.673 回答