Android之SharedPreferences详解与原理分析

Android SharedPreferences 详解与实战代码示例 SharedPreferences 是 Android 提供的一种轻量级数据持久化机制,采用键值对(Key-Value)形式存储数据,并以 XML 文件保存在应用私有目录中。其设计目标是简化小型配置数据的读写操作。该方法声明如下:其中参数mode表示文件的操作模式,通常为(API 级别已弃用显式传入,推荐使用默认私有模式)。从 Android N(API 24)开始,此参数已被忽略,所有文件均以私有方式创建,无法被其他应用读取。由于是Activity。 阅读详情

SharedPreferences作为Android存储数据方式之一,主要特点是:
1. 只支持Java基本数据类型,不支持自定义数据类型;
2. 应用内数据共享;
3. 使用简单.

SharedPreferencesImpl是SharedPreferences接口的具体实现类,一个name对应一个SharedPreferencesImpl,一个应用程序中根据name的不同会有多个SharedPreferencesImpl。
SharedPreferencesImpl的具体实现是在frameworks/base/core/java/android/app/SharedPreferencesImpl.java,我们可以通过getSharedPreferences获得SharedPreferences的实例,当我们调用sp.getString等get方法取数据时,实际上是直接从内存中的Map里面去取,get方法传入的第一个参数正好是Map的key,第二个参数是当Map中没有这个key对应值的时候,返回的默认值。

操作模式

mode:是指定读写方式,其值有四种。分别为

Context.MODE_PRIVATE
 Context.MODE_APPEND
Context.MODE_WORLD_READABLE
Context.MODE_WORLD_WRITEABLE 
    ontext.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能应用本身访问,在该模式下,写入的内容会覆盖原文件的内容  

    Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件.

    Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件.

    MODE_WORLD_READABLE:表示当前文件可以被其他应用读取.

    MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入

使用方法

1、存数据

SharedPreferences sp = getSharedPreferences("sp_demo", Context.MODE_PRIVATE);
Editor editor = sp.edit();
editor.putString("name", "小张");
editor.putInt("age", 11);
editor.commit();

2、取数据

SharedPreferences sp = getSharedPreferences("sp_demo", Context.MODE_PRIVATE);
String name = sp.getString("name", null);
int age = sp.getInt("age", 0);
简易电梯控制系统设计(两层楼)( (电子科技大学 数字系统实验二 结课验收项目 ) 题目要求: 阅读详情

相关推荐

从芯片原厂到BSP工程师:技术转型与核心能力解析

嵌入式系统开发中,BSP(板级支持包)作为连接硬件与操作系统的关键层,其开发能力直接影响设备稳定性与性能。理解Linux内核架构(如内存管理、进程调度)和基础接口协议(I2C/SPI/USB)是BSP工程师的核心技能。在芯片验证与驱动开发场景中,多核异构系统调试与稳定性问题排查(如死机分析)展现了工程师的实战能力。随着物联网与智能设备发展,掌握从硬件适配到系统优化的全链路技术栈,成为职业发展的关键突破点。

weixin_36012152的博客 599

移动应用开发 试题 复习

移动应用开发可能的样题

qq_49399033的博客 4048

保姆级教程:用sw_urdf_exporter插件将Solidworks机械臂模型转为ROS可用的URDF

本文提供了一份详细的保姆级教程,指导用户使用sw_urdf_exporter插件将Solidworks机械臂模型转换为ROS可用的URDF文件。从环境准备、插件配置到模型预处理和关键参数设置,再到ROS环境集成测试和性能优化,全面覆盖了机械臂URDF转换的全流程。特别适合机器人工程师和ROS开发者快速实现Solidworks模型到ROS环境的无缝迁移。

weixin_29300931的博客 399

SharedPreferences的使用场景和限制

综上所述,SharedPreferences是一种轻量级的数据存储方式,适用于存储少量的键值对数据。它简单易用,适合用于保存应用程序的配置信息、用户偏好设置以及缓存临时数据等场景。然而,SharedPreferences也存在一些限制,如存储容量有限、不支持复杂数据结构、不支持并发访问、不支持事务操作以及不支持跨进程访问等。因此,在使用SharedPreferences时需要根据具体的需求和场景进行权衡和选择。

Good_tea_h的博客 1572

浅谈车联网概述-1

车联网技术目前在车企中应用广泛,车联网通过车载传感器、无线通信等技术,能够将车辆上百的传感器数据上传至云端,当前智能网联车辆可以理解为一个“大号”手机。

Hello, World! 新能源汽车智能网联工程师,分享日常工作思考。 559

普冉PY32F002B ADC内部参考电压VREFINT的误差补偿与低功耗优化实践

本文详细介绍了普冉PY32F002B单片机在锂电池供电场景下ADC内部参考电压VREFINT的误差补偿与低功耗优化实践。通过分析GPIO配置、分压电阻匹配、采样时间设置等硬件设计要点,结合实时测量VREFINT电压值和软件补偿算法,有效提升了ADC测量精度至5mV以内,并实现了分压电路功耗控制与采样频率优化,为低成本消费电子项目提供了完整的解决方案。

846

关于SharedPreferences一些总结

问题来源 在QQ相互学习(编程5分钟,扯淡两小时)的过程中,有位哥们提出了一个问题,sharePreferes最多存多少信息,这个度量各位可以理解为多少KB。他这么一问,还真不知道了,话说这个就有点尴尬了,感觉翻阅了一些源码,在查看源码的过程中,理解了一些东西,以前有些很模糊的概念,现在也有了感觉,特此记录一下其中学到的知识。以下SharedPrefences简称sp。 开始扯淡 sp...

成长的烧年 2997

ANSYS Fluent 2023R2实战:用欧拉多相流模型搞定流化床模拟(附详细参数避坑)

本文详细解析了ANSYS Fluent 2023R2中欧拉多相流模型在流化床模拟中的应用,包括模型选择、材料属性设置、相间作用力配置及初始化技巧。特别针对高颗粒浓度工况提供参数优化方案,帮助工程师提升模拟精度与效率,适用于化工、能源等领域的流化床反应器设计。

weixin_30938149的博客 268

Android SharedPreferences

Android SharedPreferences

李青涛的博客 427

【fpdlink显示】DS90UB948关于941连接948 GPIO调试问题

1. 前言 使用一个941连接2 948显示: 941的GPIO0/1/2/3到前948的GPIO0/1/2/3和941的D_GPIO0/1/2/3到948的GPIO0/1/2/3。 设置gpio3输出,则941的D_GPIO3设置高,而948的gpio3设置不高; 但设置gpio3输入后,看到941的D_GPIO3跟随948的gpio3变化。 2. 原理图连接 3. 测试代码 static int du90ub941_enable_port(struct goodix_ts_d

jzwjzw19900922的博客 2555

【AI应用实战-claude】在飞书上接入claudecode进行远程使用(十三)

本文介绍了三种将ClaudeCode接入飞书的方案,包括官方飞书CLI工具(推荐)、cc-connect中转工具和MCP协议集成。官方飞书CLI适合自动化办公场景,通过简单配置即可实现消息发送和文档管理;cc-connect适用于远程调用Claude功能,通过飞书群聊触发响应;MCP协议则适合开发者构建复杂工作流。文章提供了详细的操作步骤,并针对不同使用场景给出了选择建议。

1013

Android SharedPreferences 详解 源码解析

1.实现类 SharedPreferences 只是一个接口,其实现类是SharedPreferencesImpl。 工作流程分析: 创建sp 的时候,会去查看是否有bak文件,如果有的话,把bak文件,重命名成file的真正文件名,读取到内存。 SharedPreferencesImpl(File file, int mode) { mFile = file; ...

男儿不展风云志,空有天生八尺躯 855

第133章 PCL OrientedBoundingBox 有向包围盒

中文叫有向包围盒,是一种旋转过的包围盒。特点:不像AABB那样固定朝向坐标轴能更紧密地包裹物体适用于复杂姿态的物体,比如倾斜、旋转的物体通常通过PCA、惯性矩等算法确定方向。

yumeiguo的博客 263

告别广告弹窗!用MT管理器+反射大师,手把手教你逆向修改安卓App(附脱壳修复教程)

本文详细解析了安卓应用广告的实现机制,并手把手教你使用MT管理器和反射大师逆向修改App去除广告。从广告模块的技术原理到静态分析、动态Hook技巧,再到脱壳修复教程,提供全流程实战指南,帮助用户告别烦人的广告弹窗,提升使用体验。

weixin_30770783的博客 392

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

5分钟搞懂 my-tv 应用锁:密码保护从设置到源码全拆解

my-tv 是装上就能看的电视直播软件,但客厅公共电视的观看记录常被家人乱动。它的应用锁通过密码保护锁住访问入口,本文讲清怎么设、为什么这么设。 ## 一台电视,三个遥控器 周末去亲戚家,电视还停在别人上次看一半的综艺页,收藏的频道也被换成了少儿台。客厅电视是全家共用的:谁按遥控器,频道和记录就归谁,你的"常看"很快变成"他看"。📺 一台电视上,密码保护解决的就是这件事:进应用先过一道锁,

gitblog_01087的博客 808

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Android SharedPreferences原理分析

目录 访问SharedPreferences SharedPreferences的创建与初始化 Editor介绍 异步操作apply 同步操作commit 写入文件writeToFile QueuedWork介绍 系统组件中对于SharedPreferences的处理 总结 注:本文基于Android 8.1。 1. 访问SharedPreferences SharedPrefer...

人生如逆旅 1195

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Android SharedPreferences源码分析

我们经常使用SharedPreferences保存一些简单的数据,比如Settings的数据。如果我们只是简单的使用,可能没什么问题,但是如果要用好它还是得明白它的实现方式,下面来从源码上来分析下SharedPreferences的缓存,异步读写实现,多线程,多进程访问。

破磬 4702

Android进阶8:SharedPreferences原理分析

关于SharePreferences(以下简称SP)的使用,相信从刚开发Android都开始使用了,但是对于SP的原理以及SP的缺点可能很多人没有系统的认知。 首先说一下SP的结论: 容易因此ANR:SP不适合存储数据量很大的信息;同时JSON以及HTML最好也不用SP存储,因为特殊字符转义是非常消耗性能的。 全量写入:在apply或者commit的时候,会先添加信息到内存中,在开启子线程,将内...

lmq121210的博客 835

Android SharedPreferences 分析

我们平时在项目里保存数据的时候经常使用SharedPreferences来保存数据,比如说什么第一次启动的数据,还有一些比较轻量级的数据保存都保存在这个里面。我们平时不管是在子线程还是主线程中都可以使用这个类来获取数据和更新数据而且也没有烦人的多线程问题。使用方法 存数据的两种方法:commit 和 apply SharedPreferences sp = getSharedPreferences(

寻梦者 746

Android轻量级存储SharedPreferences详解与实践

在移动开发中,数据持久化是基础而重要的技术概念。键值对存储作为一种简单高效的数据管理方式,通过将数据序列化为键值形式实现本地化保存。SharedPreferences作为Android平台的原生轻量级存储方案,采用XML文件结构实现数据持久化,特别适合存储应用配置和用户偏好设置。其核心价值在于提供了极其简洁的API接口,开发者无需处理复杂的数据库操作即可实现数据存取。在工程实践中,SharedPreferences广泛应用于主题设置、用户配置等场景,但需要注意其不适合存储大量结构化数据的技术限制。通过合理使

weixin_30599769的博客 500

Android性能优化之SharedPreferences

《Android 存储选项之 SQLiteDatabase 创建过程源码分析》《Android 存储选项之 SQLiteDatabase 源码分析》《数据库连接池 SQLiteConnectionPool 源码分析》《SQLiteDatabase 启用事务源码分析》《SQLite 数据库 WAL 模式工作原理简介》《SQLite 数据库锁机制与事务简介》《SQLite 数据库优化那些事儿》前言本文不是与大家一起探讨SharedPreferences的基本使用,而是结合源码的角度揭秘对SharedPrefer

2401_85122651的博客 1753

Android基础-SharedPreferences详解

本文章针对 Android 7.0 源码进行分析 SharedPreferences是 Android 中比较常用的存储方法,它可以用来存储一些比较小的键值对集合,并最终会在手机的/data/data/package_name/shared_prefs/目录下生成一个 xml 文件存储数据。它的使用非常简单,是一个 Android 开发者的基本技能,在这里不加以阐述了。 SharedPreferences带给我们非常简单易用的数据存储读写功能的同时,不知大家有没有好奇过它底层是怎样实现的呢? 通过.

语桥的博客 2398
上一篇: Android连续点击两次Back键退出程序
下一篇: 购物车界面(Bootstrap)
user_app
博客等级 码龄9年 7粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值