image.png

..

SharedPreferences

Android 五种数据存储的方式分别为:

名字 介绍
SharedPreferences 以Map形式存放简单的配置参数;
ContentProvider 将应用的私有数据提供给其他应用使用;
文件存储 以IO流形式存放,可分为手机内部和手机外部(sd卡等)存储,可存放较大数据;
SQLite 轻量级、跨平台数据库,将所有数据都是存放在手机上的单一文件内,占用内存小;
网络存储 数据存储在服务器上,通过连接网络获取数据;

Sharedpreferences是Android平台上一个轻量级的存储类,用来保存应用程序的各种配置信息,其本质是一个以“键-值”对的方式保存数据的xml文件,其文件保存在/data/data//shared_prefs目录下。在全局变量上看,其优点是不会产生Application 、 静态变量的OOM(out of memory)和空指针问题,其缺点是效率没有上面的两种方法高。

使用SharedPreferences

获取SharedPreferences对象

首先要获取SharedPreferences才能进行操作。获取SharedPreferences对象有下面两个方式:

  1. getSharedPreferences(String name, int mode)
    通过Context调用该方法获得对象。它有两个参数,第一个name 指定了SharedPreferences存储的文件的文件名,第二个参数mode 指定了操作的模式。
    mode的模式:
Context.MODE_PRIVATE: 指定该SharedPreferences数据只能被本应用程序读、写;
Context.MODE_WORLD_READABLE:  指定该SharedPreferences数据能被其他应用程序读,但不能写;
Context.MODE_WORLD_WRITEABLE:  指定该SharedPreferences数据能被其他应用程序读;
Context.MODE_APPEND:该模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件;
  1. getPreferences(int mode)
    通过Activity调用获得对象。它只有一个参数mode 指定操作模式。这种方式获取的对象创建的文件 属于Activity,只能在该Activity中使用,且没有指定的文件名,文件名同Activity名字。

例子:

mContextSp = this.getSharedPreferences( "testContextSp", Context.MODE_PRIVATE );
mActivitySp = this.getPreferences( Context.MODE_PRIVATE );
写数据

步骤1:创建一个SharedPreferences对象

SharedPreferences sharedPreferences= getSharedPreferences("data",Context.MODE_PRIVATE);

步骤2: 实例化SharedPreferences.Editor对象

SharedPreferences.Editor editor = sharedPreferences.edit();

步骤3:将获取过来的值放入文件

editor.putString("name", “Tom”);
editor.putInt("age", 28);
editor.putBoolean("marrid",false);

步骤4:提交

editor.commit();
读取数据
SharedPreferences sharedPreferences= getSharedPreferences("data", Context .MODE_PRIVATE);
String userId=sharedPreferences.getString("name","");
删除指定数据
editor.remove("name");
editor.commit();
清空数据
editor.clear();
editor.commit();

commit和apply区别

apply函数立即更改内存中的SharedPreferences对象,但异步地将更新写入磁盘。

commit函数同步地将数据写入磁盘。在主线程调用它应该多注意,因为可能引起阻塞,引起ANR。

commit有返回值,返回是否成功写入永久性存储种。apply没有返回值。

性能问题

  1. 跨进程不安全。
    由于没有使用跨进程的锁,就算使用 MODE_MULTI_PROCESS,SharedPreferences 在跨进程频繁读写有可能导致数据全部丢失。根据线上统计,SharedPreferences 大约会有万分之一的损坏率。
  2. 加载缓慢。
    SharedPreferences 文件的加载使用了异步线程,而且加载线程并没有设置优先级,如果这个时候读取数据就需要等待文件加载线程的结束。这就导致主线程等待低优先线程锁的问题,比如一个 100KB 的 SP 文件读取等待时间大约需要 50 ~ 100ms,并且建议大家提前用预加载启动过程用到的 SP 文件。
  3. 全量写入。
    无论是 commit() 还是 apply(),即使我们只改动其中一个条目,都会把整个内容全部写到文件。而且即使我们多次写同一个文件,SP 也没有将多次修改合并为一次,这也是性能差的重要原因之一。
  4. 卡顿。
    由于提供了异步落盘的 apply 机制,在崩溃或者其它一些异常情况可能会导致数据丢失。所以当应用收到系统广播,或者被调用 onPause 等一些时机,系统会强制把所有的 SharedPreferences 对象的数据落地到磁盘。如果没有落地完成,这时候主线程会被一直阻塞。这样非常容易造成卡顿,甚至是ANR,从线上数据来看 SP 卡顿占比一般会超过 5%。

http://www.taodudu.cc/news/show-3020188.html

相关文章:

  • android add fragment,Android中使用FragmentTransaction对象的add方法后应用闪退
  • 洛谷 P1719 最大加权矩形 动态规划
  • 2020-11-02
  • COGS 827. [Tyvj Feb11] 网站计划
  • P1719 最大加权矩形【前缀和】
  • P1719 最大加权矩形(二维dp)
  • 最大加权矩形 压缩+前缀和+dp
  • P1719 最大加权矩形(二维前缀和Java)
  • 矩阵压缩降维动态规划递推【P1719 最大加权矩形】
  • 洛谷 P1719 最大加权矩形 (前缀和,动态规划)
  • Vue基础语法01
  • 最大加权子矩阵问题
  • centos查看内存插槽及已插内存分布及大小命令
  • cpu-z中如何查看内存的频率和内存插槽的个数?
  • linux命令查看服务器的型号、序列号、内存插槽数
  • 计算机内存槽清理,正确清理内存条和内存槽的方法
  • Ubuntu查看内存槽的数目及内存信息
  • 华为2288HV5服务器内存插法及内存插槽位置
  • dmidecode查看内存信息,服务器序列号,内存插槽信息
  • linux查看主板最大内存容量,Linux 查看内存插槽数、最大容量的方法
  • 20190827-Ubuntu查看内存槽的数目及内存信息
  • Centos7 内存插槽信息
  • ubuntu 查看内存插槽数最大容量和频率
  • linux怎么看系统内存多大内存频率,linux 系统管理中的查看内存插槽数最大容量和频率...
  • Linux查主板槽位使用情况,linux下查看主板内存槽与内存信息
  • 计算机管理 看内存个数,如何知道/查看内存槽数
  • trx40主板支持服务器内存,华硕发布TRX40系列主板:8内存插槽设计+64个PCIe 4.0通道...
  • linux看内存插槽,Linux查看内存大小和插槽
  • linux关闭内存插槽,linux 统管理中的查看内存插槽数、最大容量和频率
  • win10:如何查看可用内存插槽

Android之SharedPreferences使用相关推荐

  1. Android中Sharedpreferences牵涉到跨进程时不能实时读取的问题

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/11271053 在做课程表应用时,由于要设置课前提醒的时间,我通过Sharedprefere ...

  2. android 之SharedPreferences,SDCard以及网络存储

    android 之数据存储分类: A.Shared Preferences:存储私有的数据以键值对的形式 B.内部存储:在设备的内存中存储私有数据 C.外部存储:在外部设备(手机SDCard等)存储共 ...

  3. android 使用SharedPreferences保存对象

    今天,简单讲讲Android如何使用SharedPreferences保存对象. 记得之前写过一遍博客关于android如何使用SharedPreferences保存List<String> ...

  4. Android 中SharedPreferences 使用

    Android 中SharedPreferences使用 一.SharedPreferences使用1 protected void onCreate(Bundle savedInstanceStat ...

  5. Android笔记 SharedPreferences demo

    1布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools ...

  6. android中sharedPreferences的用法

    SharedPreferences介绍: 做软件开发应该都知道,很多软件会有配置文件,里面存放这程序运行当中的各个属性值,由于其配置信息并不多,如果采用数据库来存放并不划算,因为数据库连接跟操作等耗时 ...

  7. 学习Android之SharedPreferences使用

    效果图例如以下: 当我们想让自己的属性设置保存下来,这时就须要SharedPreferences. 上面这个小程序,音乐状态是保存下来的.使用的上一次退出的状态. 进入DDMS,data文件下的dat ...

  8. Android的SharedPreferences存取String和List<String>类型(在Activity和Fragment内使用)

    工程目录: MainActivity package com.example.demo_eight; import android.app.Activity; import android.conte ...

  9. Android:使用SharedPreferences进行数据存储

    使用SharedPreferences进行数据存储 目录 访问SharedPreferences中的数据 案例: string.xml文件 main.xml布局文件 SpActivity 如何访问其他 ...

  10. Android存储--SharedPreferences

    简介 在Android中,主要有以下几种存储方式: SharedPreferences,在键值对中存储私有原始数据. 内部存储,在设备内存中存储私有数据. 官方示例: String FILENAME ...

最新文章

  1. 一文看懂最近70年的人工智能简史!中国已经领先全球!
  2. 一张图解释SQL Server集群、镜像、复制、日志传送
  3. 小学计算机说课稿,小学信息技术说课稿《新建文件夹》
  4. js动态增加,删除td,tr,table,div
  5. ARouter使用随记
  6. IoT平台如何实现业务配置中心
  7. td外边加div为啥不隐藏_过年炸油饼注意了,秘制配方比例教给你,柔软不吸油,放凉了不硬...
  8. 【英语学习】【WOTD】prestigious 释义/词源/示例
  9. Ruby1.9.3 Rails 3.2.3安装
  10. 爬虫之Selenium库
  11. 昆明学院C语言期末考试,昆大c试于题b.doc
  12. 万能视频格式转换器 v 2018 全能版
  13. 虚拟机ping百度失败:PING www.a.shifen.com (163.177.151.110) 56(84) bytes of data.光标就一直闪
  14. 精通CSS(5.6.3-end)PixyFairypureCSSToolHintscale
  15. 会议介绍:国际会议级别
  16. 《Think Python》练习 4-1:本章示例代码栈图、停止点偏离思考
  17. 转贴:谁说我会画板?
  18. python中slice是什么类型_在python中,slice是一个副本还是一个poin
  19. 如何使用Smartproxy运行无限的运动鞋机器人任务
  20. python爬取小说写入txt_燎原博客—python爬取网络小说存储为TXT的网页爬虫源代码实例...

热门文章

  1. python3.0正式发布的年份是_来喽,来喽,Python 3.9正式版发布了~~~
  2. 使用计算机正确坐姿,如何保持正确坐姿?(多图)
  3. 潘多拉STM32L475 1.初探
  4. Dev - C++ 安装(mac/windows)
  5. [计网:原理与实践] 第四章:网络互联(课后习题整理)
  6. MySQL 1054错误 Unknown column .... in 'on clause'
  7. asp.net MVC使用EF框架进行分页讲解
  8. 全国电费充值优惠接口源码
  9. java .class文件为什么以CAFEBABE开头?
  10. loam源码解析5 : laserOdometry(三)