【问题标题】:How to handle data missing after resume恢复后数据丢失如何处理
【发布时间】:2015-06-18 03:22:35
【问题描述】:

我在开发应用程序时遇到了一些问题。

在我最小化应用程序或关闭屏幕,并打开许多其他应用程序或在很长一段时间后重新打开手机后。 当我重新启动我的应用程序时,它会尝试恢复并继续显示相同的页面(带有片段)。 但是我需要的数据已经被销毁了,所以它将是空的。 数据是一个对象数组,我知道也许我可以将它们存储在数据库中。 但是由于每次用户点击某些东西时数据都会更新。 所以我不想将它保存到数据库中,我想这意味着不需要大量的存储 I/O。 我想知道是否有任何解决方案可以在事物被破坏时重新启动洞应用程序? 或者实现它的唯一方法是我处理空数组并自己重新加载? 我真的不想这样做,因为我想这会给我带来很多意想不到的问题,因为数据与许多页面相关。 切换页面时需要考虑的情况太多了。

有什么建议吗?

【问题讨论】:

  • 您必须使用数据库或共享首选项,如果您希望数据得到更新,您必须在简历上重新加载数据。另一种方法是你可以完全完成应用程序。
  • 因为还有其他情况会去onResme,我不能在onResume的时候重新加载。我不必将数据存储很长时间或永久,可以在 5 或 10 分钟后将其销毁。是的,我正在尝试完全完成应用程序,并在列表被销毁时从头开始。

标签: android null resume recycle


【解决方案1】:

但是我需要的数据已经被销毁了所以会是空的

那是因为your process was terminated 而你没有save your state

但是由于每次用户点击某些东西时数据都会更新

或者,您可以分叉一个线程以将数据保存为您的onPause()onStop() 方法的一部分。 “从不保存”和“每次点击都保存”之间有很多可能性。

所以我不想将它保存到数据库中,我想这意味着不需要大量的存储 I/O 巫婆

如果您希望数据在用户离开应用程序 30 分钟后仍然存在,您可以选择将数据保存在本地(文件、数据库、SharedPreferences)或将数据保存在 Internet 上的某个位置。

对于较短时间段内的少量数据,您可以将数据放入提供给onSaveInstanceState()Bundle 中,然后稍后再将数据从Bundle 中取出(例如,在您的onRestoreInstanceState() 中)活动)。您应该已经这样做以处理屏幕旋转和其他配置更改。

我想知道当东西被破坏时是否有任何解决方案可以重新启动洞应用程序?

欢迎您在启动器活动中使用add android:clearTaskOnLaunch="true",表明您总是希望在用户离开您的应用并尝试返回时从头开始。用户不会意识到这一点,因为这意味着即使短暂退出您的应用程序(例如,快速回复短信),他们也会失去状态。此属性不会终止您的进程,但会force the user back to the launcher activity 并消除您的应用中之前存在的任何其他活动。

或者实现它的唯一方法是我处理空数组并自己重新加载?

这就是开发人员通常会做的事情,是的。

【讨论】:

  • 您好,非常感谢!我不尝试保存数据,因为我不必保存很长时间,我只想保存这些数据可能 1~2 分钟,对我来说数据在很长一段时间后被破坏完全可以.所以将它保存在数据库中将是我要尝试的最后一件事。但是我遇到的一些问题是数据被破坏但活动和片段状态仍然存在,我希望应用程序在这些数据被破坏时从头开始。我在想是否有一些解决方案可以在数据被破坏时强制活动被破坏状态。
  • 我正在尝试添加 android:clearTaskOnLaunch="true",当我使用返回键离开应用程序时,它似乎会清除所有状态,但当我使用 home 离开应用程序时仍然在同一页面上按钮或切换到另一个应用程序。当我使用主页按钮离开应用程序时,我正在尝试重现该错误。查看该错误是否会再次显示,或者是否会重新启动漏洞应用程序。我能想到重新启动应用程序的唯一方法是检查数据,并在数据为空时清除所有堆栈。但我想这不是一种优雅的方式......所以我一直在寻找一些更好的方法来做到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多