android中的四大存儲(chǔ)數(shù)據(jù)方式之一SharedPrerence的使用不必多少驶沼,官方文檔說(shuō)的很詳細(xì)穴翩,也很簡(jiǎn)單及穗。但是有一個(gè)需要注意的地方就是在android的api中坤检,Editor提供了兩個(gè)提交的修改的方法:apply和commit,下面就來(lái)說(shuō)說(shuō)apply和commit把饲梭。相同點(diǎn):
1.二者都是提交preference修改數(shù)據(jù)
2.二者都是原子過(guò)程乘盖。
區(qū)別:
1.apply沒(méi)有返回值而commit返回boolean表明修改是否提交成功
2.apply是將修改數(shù)據(jù)原子提交到內(nèi)存,而后異步真正提交到硬件磁盤憔涉;而commit是同步的提交到硬件磁盤订框,因此,在多個(gè)并發(fā)的提交commit的時(shí)候兜叨,他們會(huì)等待正在處理的commit保存到磁盤后在操作穿扳,從而降低了效率。而apply只是原子的提交到內(nèi)容国旷,后面有調(diào)用apply的函數(shù)的將會(huì)直接覆蓋前面的內(nèi)存數(shù)據(jù)矛物,這樣從一定程度上提高了很多效率。
3.apply方法不會(huì)提示任何失敗的提示跪但。
綜合上述履羞,由于在一個(gè)進(jìn)程中,sharedPreference是單實(shí)例,一般不會(huì)出現(xiàn)并發(fā)沖突忆首,如果對(duì)提交的結(jié)果不關(guān)心的話爱榔,建議使用apply,當(dāng)然需要確保提交成功且有后續(xù)操作的話糙及,還是需要用commit的详幽。
commit介紹:public abstract boolean commit ()
修改你的preferences,從Editor到SharePreferences浸锨。它執(zhí)行所請(qǐng)求的修改唇聘,替代SharedPreferences中的任何數(shù)據(jù),當(dāng)2個(gè)editor同時(shí)修改preferences 柱搜,最后一個(gè)commit成功雳灾。如果不關(guān)注返回值或在程序的main線程使用時(shí),推薦使用apply().
apply介紹:public abstract void apply ()
區(qū)別:
commit將同步的將數(shù)據(jù)寫到preferences冯凹;apply立即更改內(nèi)存中的SharedPreferences谎亩,但是開(kāi)始異步提交到磁盤中。保存失敗你也不會(huì)得到任何提示信息宇姚,如果在這個(gè)sharedPreferences有另外一個(gè)editor執(zhí)行一個(gè)定期的commit匈庭,此時(shí)一個(gè)apply依舊未完成。commit將被阻塞浑劳,直到所有異步操作完成阱持,以及自己的commit。
由于SharedPreferences在進(jìn)程中是單實(shí)例的魔熏。在忽悠返回值的前提下衷咽,取代任何實(shí)例的commit或apply都是安全的。