在Android SharedPreferences中,commit和apply有什么区别?

22

SharedPreferences在安卓中用来保存应用程序数据。

commit()apply()都用于保存共享首选项中的更改。

正如在安卓库中提到的:

public abstarct void apply():
与 commit() 不同,apply() 方法会立即将更改提交到内存中的 SharedPreferences,但它会异步地将更改提交到磁盘,并且您将不会收到任何失败的通知。如果在 apply() 方法提交之后,此 SharedPreferences 的另一个编辑器执行了常规的 commit() 操作,则该 commit() 操作会阻塞,直到所有异步提交以及 commit() 操作本身全部完成为止。
public abstract boolean commit ():

将此编辑器中的偏好更改提交回正在编辑的 SharedPreferences 对象。这将原子性地执行所请求的修改,替换当前在 SharedPreferences 中的任何内容。

这是否意味着commit()所做的更改与apply()相比是即时的?哪一个更好?

如果我需要在下一个立即活动中使用同一共享首选项值,应该使用哪一个?因为我已经看到,如果更新了首选项的值,则在重新启动应用程序之前不会反映出来。

2个回答

22

Commit()是瞬时的,但会执行磁盘写入。如果您在UI线程上,请调用异步apply()


1
我不明白UI线程的含义..!!那到底是什么?我是新手。 - Veer Shrivastav
UI线程是主线程,负责设置布局并设置例如onClick监听器。 - r0-
正确,像磁盘写入这样耗时的操作会使您的用户界面响应速度变慢。 - fedepaol

15

apply() - 返回void

apply()是在2.3中添加的,它会保存但不返回一个表示成功或失败的布尔值。

commit() - 返回boolean值。

commit()如果保存成功则返回true,否则返回false。由于Android开发团队注意到大多数人都没有关注返回值,因此添加了apply()来提高速度。

您可以参考下面的链接:

Shared Preference中commit()和apply()有什么区别?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,