原文出處:http://www.ccbu.cc/android/shareperferences-intro
SharedPerferences是Android系統(tǒng)提供的一種輕量級的數(shù)據(jù)存儲方式,用來保存應(yīng)用的一些常用配置,比如Activity狀態(tài)采盒,Activity暫停時卧秘,將此activity的狀態(tài)保存到SharedPereferences中谍肤;當(dāng)Activity重載,系統(tǒng)回調(diào)方法onSaveInstanceState時整吆,再從SharedPreferences中將值取出东臀。
SharedPreferences提供了java常規(guī)的Long、Int隆檀、String等類型數(shù)據(jù)的保存接口,使用鍵值對的方式來進(jìn)行數(shù)據(jù)存儲,SharedPreferences文件是使用XML格式來對數(shù)據(jù)進(jìn)行管理的粹湃,保存在在/data/data/(packageName)/shared_prefs目錄下恐仑。
SharedPerferences存儲的特點:
- 輕量級
- 存儲簡單數(shù)據(jù)類型
- 以鍵值對的形式
- 基于XML文件存儲
- 占用的是私有數(shù)據(jù)空間
SharedPreferences的四種操作模式:
- Context.MODE_PRIVATE
- Context.MODE_APPEND
- Context.MODE_WORLD_READABLE
- Context.MODE_WORLD_WRITEABLE
模式 | 說明 |
---|---|
MODE_PRIVATE | 為默認(rèn)操作模式,代表該文件是私有數(shù)據(jù),只能被應(yīng)用本身訪問,在該模式下,寫入的內(nèi)容會覆蓋原文件的內(nèi)容 |
MODE_APPEND | 模式會檢查文件是否存在,存在就往文件追加內(nèi)容,否則就創(chuàng)建新文件 |
MODE_WORLD_READABLE | 表示當(dāng)前文件可以被其他應(yīng)用讀取 |
MODE_WORLD_WRITEABLE | 表示當(dāng)前文件可以被其他應(yīng)用寫入 |
獲取SP(SharedPerferences)的方法:
- PerferencesManager.getDefaultSharedPreferences(context);//不推薦使用
- context.getSharedPreferences("指定SP的名稱", Context.MODE_PRIVATE);
- Activity類中的getPreferences(int mode)方法 // 該方法只接受一個模式參數(shù),這個方法會自動將當(dāng)前活動的類名做為SharedPreferences的文件名
存儲內(nèi)容:
haredPerferences sp = context.getSharedPerferences("mySp", Context.MODE_PRIVATE);
SharedPerferences.Editor editor = sp.edit();
editor.putString("name", name);//put方法有很多,參數(shù)都是鍵值對
editor.commit();//最后提交修改即可
讀取內(nèi)容:
SharedPerferences sp = context.getSharedPerferences("mySp", Context.MODE_PRIVATE);
String name = sp.getString("name", null);//get方法對應(yīng)put为鳄,參數(shù)是鍵和默認(rèn)值
SP是一個單例對象裳仆,支持多線程。
-
SharedPerferences.Editor有兩種提交方法
- abstract boolean commit() 該方法是將內(nèi)容提交到磁盤
- abstract void apply() 該方法是將內(nèi)提交至內(nèi)存孤钦,異步的進(jìn)行磁盤IO操作
在并發(fā)環(huán)境中后一個commit請求會等待前一個commit執(zhí)行完畢后再執(zhí)行歧斟;而apply則會直接覆蓋掉前一個apply
所以,在不關(guān)心數(shù)據(jù)提交成功與否的情況下偏形,盡可能使用apply提高性能静袖。
SP使用建議
- APP版本升級并不會刪除原有SP文件,有必要可以將APP版本號儲存至SP文件中
- 應(yīng)該減少單個SP文件的大小
- 只應(yīng)該在單進(jìn)程使用SP俊扭,否則有可能發(fā)生數(shù)據(jù)安全風(fēng)險