Android之数据存储总结篇

1. 描述一下Android数据持久存储方式?

Android 平台实现数据持久存储的常见几种方式:

  1. SharedPreferences 存储:一种轻型的数据存储方式,本质是基于XML文件存储的 key-value 键值对数据,通常用来存储一些简单的配置信息(如应用程序的各种配置信息);

  2. SQLite 数据库存储:一种轻量级嵌入式数据库引擎,它的运算速度非常快,占用资源很少,常用来存储大量复杂的关系数据;

  3. ContentProvider:四大组件之一,用于数据的存储和共享,不仅可以让不同应用程序之间进行数据共享,还可以选择只对哪一部分数据进行共享,可保证程序中的隐私数据不会有泄漏风险;

  4. File 文件存储:写入和读取文件的方法和 Java 中实现 I/O 的程序一样;

  5. 网络存储:主要在远程的服务器中存储相关数据,用户操作的相关数据可以同步到服务器上;


2. SharedPreferences的应用场景?注意事项?

  1. SharedPreferences 是一种轻型的数据存储方式,本质是基于 XML 文件存储的 key-value 键值对数据,通常用来存储一些简单的配置信息,如 int,String,boolean、float和long;

  2. 注意事项:

    1. 勿存储大型复杂数据,这会引起内存 GC、阻塞主线程使页面卡顿产生 ANR;

    2. 勿在多进程模式下,操作 Sp;

    3. 不要多次 edit 和 apply,尽量批量修改一次提交;

    4. 建议 apply,少用 commit;


3. SharedPrefrences的apply和commit有什么区别?

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

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

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


4. 了解SQLite中的事务操作吗?是如何做的?

  1. SQLite 在做 CRDU 操作时都默认开启了事务,然后把 SQL 语句翻译成对应的 SQLiteStatement 并调用其相应的 CRUD 方法,此时整个操作还是在 rollback journal 这个临时文件上进行,只有操作顺利完成才会更新 db 数据库,否则会被回滚;

5. 使用SQLite做批量操作有什么好的方法吗?

  1. 使用 SQLiteDatabase 的 beginTransaction 方法开启一个事务,将批量操作 SQL 语句转化为 SQLiteStatement 并进行批量操作,结束后 endTransaction();

6. 如何删除SQLite中表的个别字段

  1. SQLite 数据库只允许增加字段而不允许修改和删除表字段,只能创建新表保留原有字段,删除原表;

7. 使用SQLite时会有哪些优化操作?

  1. 使用事务做批量操作;
  2. 及时关闭 Cursor,避免内存泄露;
  3. 耗时操作异步化:数据库的操作属于本地 IO 耗时操作,建议放入异步线程中处理;
  4. ContentValues 的容量调整:ContentValues 内部采用 HashMap 来存储 Key-Value 数据,ContentValues 初始容量为 8,扩容时翻倍。因此建议对 ContentValues 填入的内容进行估量,设置合理的初始化容量,减少不必要的内部扩容操作;
  5. 使用索引加快检索速度:对于查询操作量级较大、业务对查询要求较高的推荐使用索引;

声明:本文整理自网络,如有侵权请联系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liusaisaiV1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值