如何处理恢复后丢失的数据

时间:2015-04-12 21:19:48

标签: android null resume recycle

我在开发App时遇到了一些问题。

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

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

  

但我需要的数据已被销毁,因此它将为空

这是因为your process was terminated而您没有save your state

  

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

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

  

所以我不想把它保存到数据库中,我想这意味着很多存储I / O女巫都没有必要

如果您希望数据在用户离开应用程序后30分钟内存在,您可以选择在本地保存数据(文件,数据库,SharedPreferences)或将数据保存在Internet上的某处。 / p>

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

  

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

欢迎您add android:clearTaskOnLaunch="true"加入您的启动器活动,以表明您始终希望在用户离开您的应用并尝试重新启动时始终从头开始。用户不会理解这一点,因为这意味着即使您的应用程序短暂退出(例如,快速回复短信),他们也将失去其状态。此属性不会终止您的流程,但它会force the user back to the launcher activity并且会消除之前您应用中的所有其他活动。

  

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

开发人员通常会这样做,是的。