gpt4 book ai didi

android - Android 的 SharedPreferences commit() 什么时候返回 false?

转载 作者:IT王子 更新时间:2023-10-28 23:30:08 26 4
gpt4 key购买 nike

在我的应用程序中,我将一些数据存储在 SharedPreferences 中 - 它可以根据需要工作。现在我想为一些不正确的情况创建日志消息。

我成功处理了首选项为空或加载时引发异常的情况。保存值时唯一可能出现的错误是 commit() 返回 false - 我不知道为什么会发生这种情况以及在这种情况下我应该做什么。

所以我的问题是:commit() 方法什么时候返回 false?在这种情况下我该怎么办?可能的解决方案是一次又一次地调用 commit() (类似于 while (!editor.commit()) {})?

最佳答案

首先,您永远不会想要这样做:while(!editor.commit()) {;}。如果你想重试一次提交,你会这样做几次,而不是永远循环。

关于 commit() 何时返回 -1:commit() 和 apply() 都对内存进行更改,然后调用将更改写入磁盘 (per source)。 commit() 等待磁盘写入返回返回结果。因此,您的问题的答案是:“当您的特定 commit() 调用将首选项状态保存到磁盘时失败。”由于更改反射(reflect)在内存中,因此它们可能会或可能不会在您尝试磁盘写入之前或之后由另一个 commit() 或 apply() 调用写入磁盘(想想赛车线程)。由于没有回滚内存更新的代码并且 SharedPreferences 是单例 (per source),因此您应用中的其他组件即使没有保存到磁盘也会看到您的更改。

总而言之,循环几次(不是永远)以确保 commit() 写入磁盘似乎可以让您克服间歇性 I/O 问题,但这是一种罕见的基于 I/O 的情况,它失败。如果您需要完美的提交范围,您可能需要重新读取磁盘以验证每个 commit() 调用,这会影响性能,并且对于除少数情况外的所有情况都是过大的。

关于android - Android 的 SharedPreferences commit() 什么时候返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30475362/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com