Android中五中存储方式的区别和优劣性

数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种主要方式,分别是:
1 使用SharedPreferences存储数据
2 文件存储数据
3 SQLite数据库存储数据
4 使用ContentProvider存储数据
5 网络存储数据

第一种: 使用SharedPreferences存储数据

  适用范围:保存少量的数据,且这些数据的格式非常简单:字符串型、基本类型的值。比如应用程序的各种配置信息(如是否打开音效、是否使用震动效果、小游戏的玩家积分等),解锁口 令密码等

  核心原理:它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。其存储位置在/data/data/< >/shared_prefs目录下。
 SharedPreferences本身是一个接口,程序无法直接创建SharedPreferences实例,只能通过Context提供的getSharedPreferences(String name, int mode)方法来获取SharedPreferences实例,该方法中K值name表示要操作的xml文件名,第二个参数键值具体如下:

实现SharedPreferences存储的步骤如下:

一、根据Context获取SharedPreferences对象
二、利用edit()方法获取Editor对象。
三、通过Editor对象存储key-value键值对数据。
四、通过commit()方法提交数据。

  Context.MODE_PRIVATE: 指定该SharedPreferences数据只能被本应用程序读、写

  Context.MODE_WORLD_READABLE: 指定该SharedPreferences数据能被其他应用程序读,但不能写。

  Context.MODE_WORLD_WRITEABLE: 指定该SharedPreferences数据能被其他应用程序读,写

  SharedPreferences与SQLite数据库相比,免去了创建数据库,创建表,写SQL语句等诸多操作,相对而言更加方便,简洁。但是SharedPreferences也有其自身缺陷,比如其只能存储boolean,int,float,long和String五种简单的数据类型,比如其无法进行条件查询等。所以不论SharedPreferences的数据存储操作是如何简单,它也只能是存储方式的一种补充,而无法完全替代如SQLite数据库这样的其他数据存储方式。

第二种: 文件存储数据

关于文件存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的。
文件可用来存放大量数据,如文本、图片、音频等
默认位置:/data/data/< >/files/***.***。

  可以在设备本身的存储设备或者外接的存储设备中创建用于保存数据的文件。同样在默认的状态下,文件是不能在不同的程序间共享。

  写文件:调用Context.openFileOutput()方法根据指定的路径和文件名来创建文件,这个方法会返回一个FileOutputStream对象。

  读取文件:调用Context.openFileInput()方法通过制定的路径和文件名来返回一个标准的JavaFileInputStream对象。

第三种:SQLite存储数据

  SQLite Database数据库。Android对数据库的支持很好,它本身集成了SQLite数据库,每个应用都可以方便的使用它,或者更确切的说,Android完全依赖于SQLite数据库,它所有的系统数据和用到的结构化数据都存储在数据库中。 SQLite是轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。许多开源项目((Mozilla, PHP, Python)都使用了 SQLite.SQLite 由以下几个组件组成:SQL 编译器、内核、后端以及附件。SQLite 通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展 SQLite 的内核变得更加方便。

SQLite它具有以下优点: 

1..效率出众

2. 十分适合存储结构化数据

3. 方便在不同的Activity,甚至不同的应用之间传递数据。 

4.面向资源有限的设备
 
5.没有服务器进程,
 
6.所有数据存放在同一文件中跨平台,
 
7.可自由复制。

 
数据库存储在 data/< 项目文件夹 >/databases/ 下。 Android 开发中使用 SQLite 数据库 Activites 可以通过 Content Provider 或者 Service 访问一个数据库。

第四种:ContentProvider

  Android系统中能实现所有应用程序共享的一种数据存储方式,由于数据通常在各应用间的是互相私密的,所以此存储方式较少使用,但是其又是必不可少的一种存储方式。例如音频,视频,图片和通讯录,一般都可以采用此种方式进行存储。每个ContentProvider都会对外提供一个公共的URI(包装成Uri对象),如果应用程序有数据需要共享时,就需要使用ContentProvider为这些数据定义一个URI,然后其他的应用程序就通过Content Provider传入这个URI来对数据进行操作。

 

第五种:网络存储

  网络一般用于需要实时传输数据,由于移动产生流量需要资费,并且现在中国大陆地区的网络速度不尽人意,所以通过网络发送数据时需要注意数据量,如非必要,也不要使用网络发送。但是如果有些数据在移动端不能处理或者处理比较麻烦时,可以考虑通过网络发送到服务器处理。

总结:

1.简单的数据与配置信息,SharedPreferences 是首选 2.如果数据量太大,SharedPreferences 不够用,可以考虑使用数据库,处理关系比较复杂。 3.对于结构化的数据,一定要使用数据库,虽然会显得比较麻烦,但是后续的使用中会获益无穷 4.普通文件就是指文本文件,二进制文件,多媒体文件等等 5.尽量不要去创建文件,利用 API 提供的文件存储方式去存储(SharedPreferences,数据库) 6.如果一定要创建文件,假设该文件是私密文件或者重要文件,则一定要保存在内部存储中,反之存放到外部存储即可 7.使用网络存储时要避免传输大数据量数据,应注意对网络传输方式的优化(减少请求次数等)





猜你喜欢

转载自blog.csdn.net/qq_34927117/article/details/53087487