浅析Android之数据共享

2022-09-14

1 Android数据共享

数据是应用的核心, 但是在Android中, 每一个应用都运行在各自的进程中, 当一个应用需要访问其他应用的数据时, 也就是数据需要在不同的虚拟机之间传递, 这样的情况操作起来可能有些困难——在正常情况下, 不能读取其他应用的数据。

那么Android是如何实现应用程序之间数据共享的?一个应用程序可以通过一套标准及统一的接口将自己的数据暴露出去, 而外界可以通过这一套标准及统一的接口和这个程序里的数据打交道。

2 通过Intent实现数据共享

Android为了屏蔽进程的概念, 利用不同的组件 (Activity、Service) 来表示进程之间的通信。组件间通信的核心机制是Intent, 通过Intent可以开启一个Activity或Service, 而不论这个Activity或Service是属于当前应用还是其它应用的。

Intent包含两部分。

(1) 动作 (action) ——要执行的动作, 即要转移的组件。

(2) 内容 (category、data) ——要传递的数据, 即要共享的数据。

Intent类型。

(1) 显式——直接指定消息目的地, 只适合同一进程内的不同组件之间通信。

new Intent (this, Target.class)

2) 隐式——需要在Android Mainif est.xml中注册, 一般用于跨进程通信。

new Intent (String action)

有了Intent这种基于消息的进程内或进程间通信模型, 我们就可以通过Intent去开启一个Service, 也可以通过Intent跳转到另一个Activity, 不论上面的Service或Activity是在当前进程还是其它进程内的, 即不论Service或Activity是当前应用还是其它应用的, 通过消息机制都可以进行通信, 实现数据共享。但是通过消息机制实现的进程间通信, 有一个弊端就是, 如果我们的Activity与Service之间的交往不是简单的Activity开启Service操作, 而是要随时发一些控制请求, 那么必须就要保证Activity在Service的运行过程中随时可以连接到Service。

3 通过Shared Preferes实现

Shared Preferes是一种轻量级的数据保存方式。通过Shared Preferes可以将NVP (Name/Value Pair, 名值对) 保存在Android的文件系统中, 而且Shared Preferes完全屏蔽的对文件系统的操作过程, 开发人员仅是通过调用Shared Preferes对NVP进行保存和读取的。另外, Shared Preferes多用于保存软件配置参数, 它主要是现实小数据的存储与恢复显示状态。其背后是用xml文件存放数据, 文件存放在/data/data//shar ed_pref s目录下。

Shared Preferes支持三种访问模式。

(1) 私有 (MODE_PRIVATE) :仅有创建程序有权对其进行读取或写入。

(2) 全局读 (MODE_WORLD_READABLE) :不仅创建程序可以对其进行读取或写入, 其他应用程序也有读取操作的权限, 但没有写入的权限。

(3) 全局写 (MODE_WORLD_WRITEABLE) :创建程序和其他程序都可以对其进行写入操作, 但其他程序没有读取的权限。

Shared Pref eres的使用方法。

(1) 保存数据。

(1) 通过上下文对象获得一个Shared Preferences对象。

(2) 利用得到Shared Preferences对象获得一个Edit对象, 使用Edit对象实现对简单数据的保存, 注意要记得Edit的commit方法。

(2) 获取数据。

(1) 通过上下文对象获得一个Shared Preferences对象。

(2) 使用Shared Preferences对象的get方法获取数据。

4 Content Provider

在实际的应用中, 每个应用都可以创建自己的数据, 但是这个数据对其他应用来说是不可见的, 当某个应用需要将自己的数据共享给其他应用使用时, 我们就需要使用到内容提供者Content Pr ovider, 使用Content Provider去访问某个应用程序的数据, 让我们不必关心某个应用程序的数据存储方式。如果一个程序想让其他程序操作自己的数据就必须定义自己的Content Provider然后再清单文件中进行注册, 其他应用程序就可以根据Content Provider定义的Uri对某一应用程序的数据进行操作。

android中的电话本等数据就是通过Content Provider实现数据共享的, 系统中有很多已经存在的共享Uri。我们可以使用Content Resolver通过Uri来操作不同表的数据;如Contacts.People.CONTENT_URI。

定义和使用自己的Content Provider需要以下三步。

第一步, 定义自己的Content Provider, 必须继承Content Provider, 根据业务的需要实现相应的方法。要注意的是, 我们自己定义的Content Provider要提供对数据操作的入口 (Content Provider可以对数据库进行操作当然, 也可以对文件类型的数据进行操作) 。

第二步, 在项目Manifest.xml文件中配置我们自定义的Content Provider。

第三步, 在其他应用中使用Content Resolver对Content Provider进行访问 (实际上Content Re solver对象签名方法在内部最终是根据传入的Uri拿到对应的Content Provider对象, 实现对数据的操作) 。

总之, 通过以上几种方式, Android的应用程序间可以实现数据共享。另外, Android在数据共享的安全方面有一个统一、完备和轻便的安全策略模型, 即权限设置。我们可以定义自己permission, 然后在需要的组件处设置该permission, 那么用户要想该使用组件的数据时, 就必须要配置该permission, 否则访问就会失败。

摘要:Android是基于Linux开放性内核的操作系统, 是Google公司在2007年11月5日公布的手机操作系统。Android作为Google移动互联网战略的重要组成部分, 将进一步推进“随时随地为每个人提供信息”这一企业目标的实现。Google的目标是让移动通信不依赖于设备, 甚至是平台。出于这个目的, Android将完善而不是替代Google长期以来推行的移动发展战略:通过与全球各地的手机制造商和移动运营商成为合作伙伴, 开发既实用又有吸引力的移动服务, 并推广这些产品。

关键词:保存方式,数据共享,文件

上一篇:基于学生资助绩效评价为导向的高职院校“123”资助育人模式的研究与实践下一篇:特低渗油藏低强度注水驱油效率与参数设计研究