区别
sharepreference 两种提交方式是commit和apply,区别在于:
1.commit 返回boolean类型的值,提示是否提交成功,而apply没有返回值;
2.commit 直接写入磁盘,apply先写入内存,然后异步写入磁盘;
总结:
commit是同步提交,返回值告诉我们是否提交成功;apply是异步提交,效率高,无法确定是否提交成功。
建议
根据阿里巴巴Android开发手册
【推荐】SharedPreference 提交数据时,尽量使用 Editor#apply(),而非 Editor#commit()。一般来讲,仅当需要确定提交结果,并据此有后续操作时,才使 用Editor#commit()。
说明:
SharedPreference 相关修改使用apply方法进行提交会先写入内存,然后异步写入 磁盘, commit方法是直接写入磁盘。如果频繁操作的话apply的性能会优于commit, apply会将后修改内容写入磁盘。但是如果希望立刻获取存储操作的结果,并据此 做相应的其他操作,应当使用commit
正例
//正例
public void updateSettingsAsync() {
// 单例的sharepreference
SharedPreferences mySharedPreferences = getSharedPreferences("settings", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = mySharedPreferences.edit();
editor.putString("id", "foo");
editor.apply();
}
public void updateSettings() {
SharedPreferences mySharedPreferences = getSharedPreferences("settings", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = mySharedPreferences.edit();
editor.putString("id", "foo");
if (!editor.commit()) {
Log.e(LOG_TAG, "Failed to commit setting changes");
}
}
反例
//反例
editor.putLong("key_name", "long value");
editor.commit();