这更多的是对您的意见的要求,而不是问题。 这将是有点长,所以不用担心,如果你没有耐心读一遍。 停在这里,如果你不我目前使用共享偏好来频繁存储一些值,逐一,我的应用程序的执行过程中:)Android。共享首选项。崩溃情况下检索到的损坏数据
。实际上,每2秒钟这些值就会改变,并且需要将它们存储在首选项中,以便用户在关闭应用程序并重新打开应用程序后,可以从停止的位置继续。
我曾经想过的一个问题是,如果有机会强制关闭应用程序,例如电池在值被保存时死亡,那么当用户试图从他离开的地方恢复时,数据无效,因为它之前没有完全保存(例如,只有5个值中的2个被存储)。
我想如何解决这个问题是保存数据两次,在“两个时隙”(我的意思是插槽是每个值,就像我说过有多个值,将存储在“valueName_1 “或”valueName_2“),并且在正常值存储旁边,我还将在首选项内保存两个值,这些值将用于验证数据是否完全保存。 其中这两个值curSavingSpot
将参照位置在这两个插槽在那里我已经最后保存(或曾尝试在情况下保存的失败)的一个值,而其他curSavedSuccessfully
将跟踪如果LAST存储值全部是成功存储的。
例如:
- 最初在共享县每个字段为空。
curSavingSpot
指向1(第一个“slot”),curSavedSuccessfully
为false。 我开始在插槽1中保存价值和保存完成他们不会受到任何干扰,所以
curSavedSuccessfully
将作为我们已经成功保存的值2秒后发虚,我开始保存新的值。这次是插槽2.但首先,我将
curSavingSpot
的值设置为2和curSavedSuccessfully
为false。让我们说,当我保存5个值中的3个(还有2个值)时,设备崩溃。当我重新启动它时,我会首先检查上次保存会话是否成功完成,根据curSavedSuccessfully
没有发生,所以我看curSavingSpot
并采取相反的值,在这种情况下,我知道2还没有完成所以这意味着1有正确的值。
您怎么看?这是做这件事的好方法吗?有没有更好的方法确保它保存了所有必需的值?
有什么建议吗?这个想法有什么缺陷吗?
对不起,很长的文章。
你不能使用onDestroy来保存重要的数据 - 它不保证被调用。唯一可以保证的是,当用户离开你的活动时,onSaveState被调用。有一个旧的,但仍然是实际的,很好的主题http://android-developers.blogspot.ru/2010/04/multitasking-android-way.html – Deepscorn 2015-10-29 08:25:46