Android SharedPreferences
在日常的开发工作中,经常需要将一些少量配置信息(机器或是设备)持久化的保存在本地。这时候使用数据库就会闲的很笨重,而且确实如此。SharedPreferences
作为一个很轻量级存储类是比较好的选择
本篇就此简单SharedPreferences的应用。
SharedPreferences简介
SharedPreferences
是用来存储一些简单的配置文件的机制,SharedPreferences
使用Map
数据结构来存储数据(key-value
)。采用XML
格式将数据存储到设备中。
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="name">chenjy</string>
<int name="age" value="18" />
</map>
SharedPreferences使用
获取SharedPreferences
有两种方式:
1.1 调用Context
对象的getSharedPreferences()
方法,可以被用一个应用程序下的其他组件共享。
2.2 调用Activity
对象的getPreferences()
方法,该对象只能在Activity
中使用。
SharedPreferences
的四种操作模式:
Context.MODE_PRIVATE
:默认的操作模式,代表改文件为私有数据,只能被应用本身访问。该模式下,写入的文件会覆盖原文件。
Context.MODE_APPEND
:改模式会检查文件是否存在,如果存在就往文件追加内容否则就创建新文件。
Context.MODE_WORLD_READABLE
:表示当前文件可以被其他应用读取。
Context.MODE_WORLD_WRITEABLE
:表示当前文件可以被其他应用写入。
SharedPreferences
源码
SharedPreferences
通过SharedPreferences.Editor
来存储数据
-
SharedPreferences.Editor.putInt
、SharedPreferences.Editor.putString
存key
value
值。 -
SharedPreferences.Editor.remove
清除指定key
的字段。 -
SharedPreferences.Editor.clear
清空所有数据。
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
public class EasySharePreference {
private static SharedPreferences sharedPreferences = null;
private static SharedPreferences.Editor sp_editor = null;
public static void init(Context c) {
if (sharedPreferences == null) {
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(c);
}
if (sp_editor == null) {
sp_editor = sharedPreferences.edit();
}
}
public static SharedPreferences getPrefInstance() {
return sharedPreferences;
}
public static SharedPreferences.Editor getEditorInstance() {
return sp_editor;
}
// 获取名为token的`SharedPreferences`
public static String getToken() {
String token = sharedPreferences.getString("token", "").trim().replace("\n", "");
return token.replace("\"", "");
}
// 存储名为token的`SharedPreferences`
public static void saveToken(String token) {
sp_editor.putString("token", token.trim().replace("\n", "")).commit();
}
}
MainActivity:
package com.example.chenjy.chenjy;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import utils.EasySharePreference;
public class MainActivity extends Activity {
private TextView tv_token;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EasySharePreference.init(getApplicationContext());
initView();
}
private void initView(){
tv_token = (TextView)findViewById(R.id.tv_token);
EasySharePreference.saveToken("chenjy");
tv_token.setText(EasySharePreference.getToken());
}
}
SharedPreferences使用tips
-
存储位置:文件存储在
Android
目录下data\data\程序包名\shared_prefs\程序包名_preferences.xml
-
存储大小:
SharedPreferences
会在创建的时候把整个文件加载进内存,而且很持久的存在。如果SharedPreferences
过大 线程阻塞、卡顿、GC都会有的。