SharedPreferences 用法详解

作者: 咻咻ing | 来源:发表于2017-06-26 21:24 被阅读561次

    SharedPreferencesAndroid平台给我们提供的一个轻量级的存储类,使用非常简单,能够轻松的存储数据和读取数据,特别适合用于保存软件配置参数。SharedPreferences只能保存简单类型的数据,例如:Stringint等。一般会将复杂类型的数据转换成Base64编码,以字符串的形式保存。SharedPreferences背后是用xml文件存放数据,文件存放在/data/data/<package name>/shared_prefs目录下。
    使用SharedPreferences保存key-value对的步骤如下:

    1. 使用Activity类的getSharedPreferences方法获得SharedPreferences对象,其中存储key-value的文件名由getSharedPreferences方法的第一个参数指定。
    2. 使用SharedPreferences接口的edit获得SharedPreferences.Editor对象。
    3. 通过SharedPreferences.Editor接口的putXxx方法保存key-value对,其中Xxx表示不同的数据类型。例如:字符串类型的value需要用putString方法。
    4. 通过SharedPreferences.Editor接口的commit方法保存key-value对,commit方法相当于数据库事务中的提交操作。

    使用SharedPreferences保存key-value对的代码如下:

    SharedPreferences sharedPreferences = getSharedPreferences("test", Context.MODE_PRIVATE);
    
    Editor editor = sharedPreferences.edit();//获取编辑器
    
    editor.putString("name", "小明");
    
    editor.putInt("age", 24);
    
    editor.commit();//提交修改
    

    生成的test.xml文件内容如下:

    <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
    <map>
       <string name="name">小明</string>
       <int name="age" value="24" />
    </map>
    

    使用SharedPreferences读取数据代码如下:

    SharedPreferences sharedPreferences= getSharedPreferences("test",   
    Activity.MODE_PRIVATE);   
    // 使用getString方法获得value,注意第2个参数是value的默认值   
    String name =sharedPreferences.getString("name", "");   
    int age =sharedPreferences.getInt("age", 0);   
    

    SharedPreferences的四种操作模式:

    Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容
    Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件.
    Context.MODE_WORLD_READABLE:表示当前文件可以被其他应用读取.
    Context.MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入.
    

    使用SharedPreferences读取其他应用中的Preference
    读取其他应用中的Preference的前提条件是:该preference创建时指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE权限。
    例如:有个<package name>com.xiuxiuing.test的应用使用下面语句创建了preference

    getSharedPreferences("test", Context.MODE_WORLD_READABLE);
    

    我们要访问上面应用的preference,首先需要创建上面应用的Context,然后通过Context 访问preference,访问preference时会在应用所在包下的shared_prefs目录找到preference ,代码如下:

    Context context = createPackageContext("com.xiuxiuing.test", Context.CONTEXT_IGNORE_SECURITY);
    SharedPreferences sharedPreferences = context.getSharedPreferences("test", Context.MODE_WORLD_READABLE);
    String name = sharedPreferences.getString("name", "");
    int age = sharedPreferences.getInt("age", 0);
    

    说明:
    SharedPreferences.Editorapplycommit 两个方法用于提交数据编辑,这两个方法的区别在于:

    1. apply没有返回值而commit返回boolean表明修改是否提交成功

    2. apply是将修改数据原子提交到内存, 而后异步真正提交到硬件磁盘, 而commit是同步的提交到硬件磁盘,因此,在多个并发的提交commit的时候,他们会等待正在处理的commit保存到磁盘后在操作,从而降低了效率。而apply只是原子的提交到内容,后面有调用apply的函数的将会直接覆盖前面的内存数据,这样从一定程度上提高了很多效率。

    3. apply方法不会提示任何失败的提示。

    由于在一个进程中,sharedPreference是单实例,一般不会出现并发冲突,如果对提交的结果不关心的话,建议使用apply,当然需要确保提交成功且有后续操作的话,还是需要用commit的。

    欢迎关注个人公众号

    相关文章

      网友评论

        本文标题:SharedPreferences 用法详解

        本文链接:https://www.haomeiwen.com/subject/uebdcxtx.html