在 Android 开发中,SharedPreferences
是我们用来存储简单键值对数据的工具。这就像是在口袋里带着一个小笔记本,随时记录下要点或标记。但当涉及到保存这些笔记时,你有两个选择:apply
或 commit
。它们乍看之下似乎可以互换使用,但实际上它们在数据写入方式和响应方式上的不同,可能会影响到你的应用性能和用户体验。
即时提交还是异步执行?
commit
和 apply
保存偏好设置的最大区别在于它们的执行方式。
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString("KEY", "value");
// 同步保存
editor.commit();
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString("KEY", "value");
// 异步保存
editor.apply();
commit
就像是寄出挂号信 —— 它给你一个返回值(boolean
值),确认你的数据(保存)。它会将更改写入磁盘,并且在完成之前不会让你继续进行,如果不小心处理,可能会阻塞主线程。
相比之下,apply
就像是把信丢进邮箱。它确保信件会到达目的地,但不会立即确认,并且不会阻碍你进行下一项任务。
何时使用 Commit
当你需要立即确认数据持久性,并且这对你的应用流程至关重要时,选择 commit
。就像在进电梯前等那条短信发送一样。
boolean isSaved = editor.commit();
if(isSaved) {
// 继续下一步,充满信心
} else {
// 处理失败情况
}
使用 Apply 的理由
一般而言,apply
是更好的选择,特别是在处理 UI 交互时。用户在数据写入时不会感到任何延迟,从而获得更流畅的体验。
editor.apply();
// 立即继续,UI 保持响应
性能考量
从性能角度来看,apply
领先一步,因为它立即将更改提交到内存,并在后台线程中执行磁盘写入。它不会阻止用户继续使用应用。
结论
在 apply
和 commit
之间的选择应当由对立即确认的需求与性能和响应性的考量来决定。对于大多数常规的偏好设置更新,apply
就足够且推荐使用。只有在你必须确定数据立即存储,作为关键操作的一部分时,才转向 commit
。