Android 五大存储

Android 五大存储

SharedPreferences

是一种轻量级存储类,数据存储格式为键值对。适合保存一些简单的配置参数等轻量级数据,如自动登录功能保存上次登录成功的用户名和密码

只支持Java基本数据类型和String类型数据存储。如果要存取复杂的数据类型(类、图像等),就需要对这些数据进行编码,通常转换成Base64编码,然后将转换后的数据以字符串的形式保存在XML文件中

它保存数据是用xml文件存放

读取数据使用awaitLoadedLocked同步锁,是线程安全的

一般采用单例模式

使用

存储数据
//获取一个文件名为test、权限为private的xml文件的SharedPreferences对象
SharedPreferences sharedPreferences = getSharedPreferences("test", MODE_PRIVATE);
//得到SharedPreferences.Editor对象,并保存key-value键值对数据到该对象中
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("username", et_username.getText().toString().trim());
editor.putString("password", et_password.getText().toString().trim());
//apply提交数据,保存key-value对到文件中
editor.apply();
// editor.commit();
// apply没有返回值而commit返回boolean表明修改是否提交成功
// apply是将修改数据原子提交到内存, 而后异步真正提交到硬件磁盘,
// 而commit是在当前线程同步的提交到硬件磁盘,会阻塞调用它的线程。
// 因此,推荐使用apply:在多个并发的提交commit的时候,他们会等待正在处理的commit保存到磁盘后在操作,从而降低了效率。而apply只是原子的提交到内容,后面有调用apply的函数的将会直接覆盖前面的内存数据,这样从一定程度上提高了很多效率。
super.onStop();
获取数据
et_username = (EditText) findViewById(R.id.et_username);
et_password = (EditText) findViewById(R.id.et_password);
SharedPreferences sharedPreferences = this.getSharedPreferences("test", MODE_PRIVATE);
et_username.setText(sharedPreferences.getString("username",""));
et_password.setText(sharedPreferences.getString("password",""));

性能

由于创建的时候会把整个xml文件加载进内存,所以如果文件比较大,会带来一些问题:

1.第一次从sp中获取值时,可能阻塞主线程,使界面卡顿、掉帧

2.解析sp时会产生大量临时对象,导致频繁GC,引起界面卡顿

3.存储的键值对会永远存储在内存中,不会释放,若存取较大的数据则十分消耗内存

文件存储

是通过I/O流从内部存储或SD卡中读写数据。内存中存储一些较小、安全性较高的数据,外存存储较大的文件或简单的文本。如项目中所需图片、音频文件、较大的数据信息

SQLite

一种轻型、嵌入式的ACID关系型数据库,使用SQL语言。Android为此数据库提供了SQLiteDatabase类,封装了操作数据库的API。存储数据量不是很大且逻辑关系较为复杂的数据(结构性数据)。如存储本地数据信息

存储结构型、关系型数据,可使用SQL语言,支持事务处理

轻量级,占用资源非常小

每个数据库以单个文件形式存在,以B树形式存在磁盘

共享锁和独享锁机制,保证线程安全

ContentProvider

作为Android四大组件之一,为存储和获取数据提供统一的接口,可以在不同的应用程序之间共享数据,仅作为传输数据的媒介,数据源具有多样性。如获取手机短信、联系人等,进程间数据共享、交换

网络存储

与后台交互,将数据存储在后台数据库中。如庞大的数据库、较大的音频、图片

原文链接:https://blog.csdn.net/qq_29966203/article/details/92361966

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值