• Android- SharedPreferences 使用详解


    Android-SharedPreferences 使用详解

    参考

    https://developer.android.google.cn/reference/android/content/SharedPreferences

    Overview

    SharedPreferences是个好东西,我们可以用它来存储一些个性化的设置信息或者是一些简单的数据,SharedPreferences是基于XML文件的。如果有大量的数据要存储的话它是不合适的(这时候可以考虑使用Sqlite数据库来存储)。

    如何获取SharedPreferences

    方法名称 解释
    context.getSharedPreferences(string,int) 可以获取或者创建指定名称的SharedPreferences
    Activity.getPreferences(int) 获取以当前Activity名称命名的SP,实际上还是调用了getSharedPreferences 方法实现的

    先来看一下 getPreferences 方法的源码,我们可以发现 getPreferences 也是调用的 getSharedPreferences 方法。

    public SharedPreferences getPreferences(@Context.PreferencesMode int mode) {
        return getSharedPreferences(getLocalClassName(), mode);
    }
    

    SharedPreferences使用实例

    //向Shared Preferences中写入数据
    fun writeData(view: View) {
        val sp = getSharedPreferences("data", Context.MODE_PRIVATE)
        val editor = sp.edit()
        editor.putString("UserName", "This is a username")
        editor.apply()
        Toast.makeText(this, "Write successfully!", Toast.LENGTH_SHORT).show()
    }
    
    //从Shared Preference读取数据
    fun readData(view: View) {
        val sp = getSharedPreferences("data", Context.MODE_PRIVATE)
        val userName = sp.getString("UserName", "")
        Log.e("TAG", userName)
    }
    

    apply和commit方法

    apply 和 commit 方法都可以完成 SharedPreferences 数据的提交和保存,但是这两个方法会有一些不同的地方。 apply 和 commit 的操作都是原子性的但是略有区别。

    apply 方法 void apply();

    如果同一个 SharedPreferences 的多个Editor 同时进行 apply操作,那么以最后一个为准。

    apply 并没有返回值,apply方法的操作流程是先将数据提交到内存中的SharedPreferences中(将数据提交到内存中这次操作是原子性的),然后异步地将数据库写入到磁盘中(这一操作不是原子性的是可以被打断的),所以无法获取apply操作是否成功,但是apply方法要比commit 方法要快速,如果你并不关心保存是否成功的结果的话,那么推荐使用此方法。

    commit 方法 boolean commit ()

    如果同一个 SharedPreferences 的多个Editor 同时进行 commit 操作,那么以最后一个为准。

    很明显 commit 方法是具有返回值的,与apply方法不同的, commit 方法是直接将数据写入到 持久化存储 中。 这一过程都原子性的并且是同步的。如果你比较关心,保存的结果的话,推荐使用此方法。

  • 相关阅读:
    软件可靠性与安全性设计与实现知识梳理(软件可靠性与安全性高级技术研讨会心得)
    SSM框架整合
    不注册Tomcat服务,运行Tomcat不弹出JAVA控制台窗口
    ExtJS表单之复选框CheckboxGroup展示与取值
    ExtJS获取父子、兄弟容器元素方法
    LabVIEW之生产者/消费者模式--队列操作 彭会锋
    ExtJS Grid导出excel文件
    jeesite部署到Tomcat后,无法访问,cannot be resolved in either web.xml or the jar files deployed with this application
    滚动轮播插件——jCarouselLite
    统计学基础之假设检验
  • 原文地址:https://www.cnblogs.com/slyfox/p/9524823.html
Copyright © 2020-2023  润新知