正如文档所说,
与将其首选项同步写入持久存储的 commit() 不同,apply() 会立即将其更改提交到内存中的 SharedPreferences,但会开始异步提交到磁盘,并且不会通知您任何失败。
这是否意味着,如果出现某些故障(例如可用空间不足),我的 SharedPreferences 只会恢复到以前的状态,并且不会产生任何异常?我的应用程序会崩溃吗?
正如文档所说,
与将其首选项同步写入持久存储的 commit() 不同,apply() 会立即将其更改提交到内存中的 SharedPreferences,但会开始异步提交到磁盘,并且不会通知您任何失败。
这是否意味着,如果出现某些故障(例如可用空间不足),我的 SharedPreferences 只会恢复到以前的状态,并且不会产生任何异常?我的应用程序会崩溃吗?
如此处所示,在将更改写入文件之前,SharedPreferences 首先尝试创建备份文件。
如果成功:
尝试写入文件,删除备份并尽可能原子地返回 true。如果出现异常,删除新文件;下次我们将从备份中恢复。
因此,不会抛出任何异常并且 SharedPreferences 将返回到之前的状态(因为它会在将更改写入磁盘之前进行备份)。(尽管您不会收到任何失败的通知)。