谢原武+龙文
摘要: 作为一个完整的应用程序,数据存储操作是必不可少的。Android系统一共提供了四种数据存储方式分别为File文件存储、Shared Preferences存储、ContentProvider存储和SQLite数据库存储。该文以“爱自己”健康APP为例,简单地介绍了这些本地数据存储的原理和特点,并对其优缺点进行了分析。
关键词:数据存储,数据管理,存储机制
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)28-0012-02
Abstract: As a complete application, data storage operation is necessary. The Android system provides a total of four kinds of method of data storage: the File files are stored and Shared Preferences, ContentProvider storage and SQLite database storage. Based on this, through to this topic to complete the "love yourself" health APP, simply introduces the principle and characteristics of the local storage, and analyses their advantages and disadvantages.
Key words: data storage; data management; storage mechanism
1 引言
随着社会的飞速发展和人民生活水平的进一步提高,人们已经不仅仅满足于生活的温饱和娱乐,而是更多地去关注自身的身体健康,去追求健康的生活方式。本课题开发和设计了一款基于Android平台的“爱自己”健康医疗APP,算法和数据是这个软件的程序运行的核心,相应的Android开发平台提供了各种数据存储机制,使得这个健康APP在进行数据存储和管理时可以选择使用不同的方式。本文对Android系统提供的存储方式进行了简单研究,以及本次创新项目完成的“爱自己”健康APP的存储方式选择。
2 数据存储方式
2.1 File文件存储
File文件存储就是以I/O流形式来对数据进行保存和读取,可以直接将数据输出到文件中,以文件的形式存入手机内存或者SD卡中,默认的存储目录是/data/data/Package_Name/files[1]。这是个默认私有的文件,在访问这文件的时候需要设置操作模式为可读或可写。它主要是提供了openFileOutput()和openFileInput方法对文件进行读写。文件存储是Android中最基本的一种数据存储方式,不仅能将大量的数据存储到系统中,还能存储到手机SD卡上,进而节省了手机自身的存储空间,比数据库存储实现简单。但是它的缺点是更新数据比较麻烦,数据不能共享和进行条件访问。
2.2 Shared Preferences存储
Shared Preferences是在Android平台上使用的一个轻量级存储类,一般用来保存一些简单的配置信息,实质上是以.xml文件形式来存储key-value键值对数据,其对应的文件可以是在/data/data/ Package_Name/shared_prefs文件夹中找到,跟文件存储一样,这样的文件也是默认私有的,在多个应用程序之间是无法共享数据的。Shared Preferences对象本身只能获取数据,并不能支持数据存储和数据修改的操作,只能通过Shared Preferences.Editor()对象来进行这些操作。Shared Preferences对象不用像数据库管理那样创建数据库、创建表、写SQL语句等操作,相对而言快速、方便、简洁。但是这种方式只能存储boolean、int、float、long和String5种简单数据类型,而且数据是以XML格式存储到手机内存中,无法存储大量的数据。
2.3 ContentProvider存储
ContentProvider为存储和获取数据提供了统一的接口。ContentProvider一般使用表的形式来组织数据,每一个ContentProvider都对外拥有一个公共的URL,Android设备上的任何程序都可以通过这个URL来访问或对数据进行操作,实现了应用程序之间的数据共享[2]。用户一般可以通过ContentProvider类所提供的query(),insert(),update(),getType等方法去访问数据。严格意义上来说,ContentProvider并不是一种数据存储方式,而是一种对数据库中数据的封装,最终会以.db文件形式存储在手机上,它的访问方式与数据库的访问方式基本相似,操作起来也与数据库相似,基本优缺点与数据库一样,但是在Android设备中的各个应用程序间的数据应该是相互保密的,所以这种存储方式在Android开发过程中比较少用。
2.4 SQLite数据库存储
SQLite是一个可用于嵌入式设备开发的强大的轻量级数据库,支持SQL语言。它资源占用率非常低、运行效率高,具有独立性、隔离性、跨平台、安全性等多种特性,特别适合于嵌入式设备开发,目前已经应用在很多嵌入式设备开发领域中。在使用SQLite时,最常用到两个类:SQLiteDatabase和SQLiteOpenHelper。
SQLiteDatabase是Android的核心类之一,该类封装了一系列数据库操作的API,对数据库进行增、删、改、查等操作,进而完成对数据库的创建、删除。
除了SQLiteDatabase类外,Android平台还给开发者提供了一个强大的辅助类SQLiteOpenHelper。SQLiteOpenHelper是一个抽象类,通过它可以很好的对数据库进行创建和数据库的版本更新,可以通过继承SQLiteOpenHelper类,实现它的两个抽象方法,onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabse dv, int oldVersion,int new Version),其中onCreate()一般是用来检查数据库是否存在和创建数据库、创建表的,而onUpgrade()多数用来检查和更新数据库的版本。
3 “爱自己”APP的数据库设计
由于本次创新项目的“爱自己”健康医疗APP需要能够实现本地和远程的历史数据查询功能,因此谨慎设计一个合理的数据库很有必要。结合上文的简述和比较,在Android开发中,数据存储主要有四大存储方式:File文件存储,Shared Preferences存储,ContentProvider存储以及SQLite数据库存储。其中文件存储主要是用输入输出流控制,如果想对文件更加方便地访问控制,直接使用流是最好的选择。Shared Preferences存储是Android中最简单的数据存储方式,主要处理key-value键值对数据,通常Shared Preferences将数据文件写在手机内存私有的目录中,并且以xml文件的格式存储。ContentProvider存储是Android系统中定义的应用程序与其他应用程序共享数据的桥梁,设备上的程序都通过ContentProvider的URI供其他应用程序使用。Android存储方案的核心是SQLite数据库,它是专门为嵌入式设备而设计的轻量级的数据库,执行简单地SQL语句甚至比MySQL和Postgresql还快,Android系统对于操作SQLite数据库提供了很多java工具类,从而方便我们进行Android平台数据存储功能应用开发[3]。而此次的“爱自己”APP要设计的软件数据存储部分就是使用Android SQLite数据库进行数据存储功能设计的。
“爱自己”APP要实现数据存储的需求主要有:对于用户的注册信息存储、用户的健康数据测量的数据存储和对应用户的健康数据反馈的数据存储。根据这个需求,设计了数据库personinfo.db,主要包含四张表,由于Android平台下的SQLite数据库并不是全部都支持外键功能,因此,在这四张数据表的设计过程中都没有用到外键。四张表分别包含有用户信息表,用户摄食记录表,食物所对应的卡路里表,用户健康状况反馈表。其中用户信息表主要是记录包含了用户的个人信息,用户摄食记录表主要是记录了对应用户的摄入各种食物的信息,食物所对应的卡路里表主要是记录了各种食物的卡路里量值,用户健康状况反馈表主要是记录了系统根据对应用户的健康状况给出的建议的信息。4张表的具体信息如下:
在“爱自己”的整个数据存储设计实现上使用SQLite创建数据库主要是通过继承SQLite OpenHelper类来完成创建以及各种数据库的操作。
4 结论
整个社会信息化程度的不断加深,基于Android智能设备的应用程序的不断更新与发展,算法与数据依旧是一个计算机程序运行的核心。一个完整的应用程序开发中选择一个与之相匹配的数据存储方式,便会极大地提高整个程序软件的总体运行性能。“爱自己”是一款综合型的APP,无论是实时数据还是历史数据,它都有对数据进行快速分析和处理的功能,在其数据库设计的过程中仍然存在着不足,但随着智能设备传感器的不断普及,它对传感器的调用也让用户对实时数据和历史数据都有一个深刻的认识,能在使用时充分结合两者而达到灵活转换的目的。相信随着智能时代的到来,算法和数据仍然是这一时代智能设备发展的一个主流研究。
参考文献:
[1] 传智播客高教产品研发部.Android移动应用基础教程[M]. 中国铁道出版社,2015.
[2] 朱桂英.Android开发应用从入门到精通[M].中国铁道出版社,2011.
[3] 张永瑞.基于Android及Java Web平台的个人健康信息管理系统[M].2014.
[4] 彭艳,杨欧.Android平台的数据存储技术[J].计算机系统应用,2012(5).