Android开发中的REST与内容提供者
立即解锁
发布时间: 2025-08-23 01:37:35 阅读量: 1 订阅数: 4 

### Android开发中的REST与内容提供者
#### 1. 内容提供者基础
在Android开发里,`Context.openFileOutput` 是创建私有文件的便捷方法。它会在应用的私有沙盒子目录下创建文件。若要以编程方式获取该目录名称,构建 `_data` 列的完整路径名,可使用 `Context.getFilesDir` 方法。存储到 `_data` 列的文件名如下:
```java
context.getFilesDir() + "/" + filename
```
#### 2. 内容提供者概述
内容提供者是Android的关键架构组件,为移动架构奠定了基础,就像从互联网提取的RESTful缓存直接应用到移动设备上。它具有以下特点:
- **客户端视角行为**:从客户端角度出发,内容提供者有其基本行为。
- **契约文件**:引入契约文件,它是内容提供者API的可导出定义。
- **具体实现**:深入探讨内容提供者的实现细节,涉及如URI匹配器、事务、查询构建器等工具,以及实现虚拟表空间的实用工具。
- **注册与权限**:需在应用清单中注册内容提供者,并使用权限控制对其的访问。
- **内容观察者**:内容观察者是Android的出色特性之一,它以URI作为所代表数据集的会合点。客户端更改底层数据集时发送的通知会广播给所有订阅该通知的客户端。
- **高级应用**:可利用内容提供者方便地访问大型数据对象,包括高效传输文件。
#### 3. 移动开发面临的挑战
移动开发者(包括Android开发者)在与远程服务通信时面临诸多常见挑战。在本地网络甚至有线互联网上简单的任务,如使用远程服务或请求远程数据,在移动环境中可能存在各种潜在问题。在移动平台和后端Web服务之间同步数据的同时高效使用网络,更是增加了难题。Android开发者面临的主要挑战如下:
- **数据同步**:移动客户端与Web服务之间的数据同步。
- **大数据集处理**:处理大型数据集。
- **API复用**:使用Android API解决这些问题,使解决方案能在不同应用领域复用。
- **UI线程处理**:在远程请求期间正确处理Android MVC和UI线程。
#### 4. 引入REST架构风格
本章引入REST(表述性状态转移)这一强大的架构风格,并通过两个示例客户端展示其应用,这些客户端将联系人信息存储在RESTful服务器中。REST架构风格具有以下特点:
- **历史背景**:REST的根源可追溯到20世纪90年代中期,2000年Roy Fielding在其博士论文中正式提出并定义了该名称。作为HTTP的设计者之一,Fielding用REST规范了一种满足Web目标(如极端、无政府主义的可扩展性)的架构风格。
- **为何选择REST**:20世纪90年代,工程师在分布式计算架构中存在一些错误假设,被称为“网络计算的谬误”,具体如下:
1. 网络可靠。
2. 延迟为零。
3. 带宽无限。
4. 网络安全。
5. 拓扑结构不变。
6. 只有一个管理员。
7. 传输成本为零。
8. 网络同质。
早期线性扩展架构的尝试大多令人失望,而REST风格则关注底层网络的不确定性。它的架构约束与这些谬误相反,为设计一致、有弹性和高度可扩展的客户端 - 服务器系统提供了优雅的工具。尤其在移动计算领域,移动设备感知的网络可靠性更低,REST风格能让开发者开发出更稳定的应用。
- **RESTful API的属性**:
- **客户端/服务器**:明确区分客户端(请求服务的实体)和服务器(监听请求并提供服务的实体)的角色。
- **无状态**:客户端不能期望服务器在请求之间保留上下文,每个请求必须包含服务器处理所需的全部信息。
- **资源表示交换**:描述命名资源表示的交换,而非资源本身,承认对象内部和外部表示之间存在抽象层。例如,服务器可用JSON或XML描述同一资源,一个资源可有多种表示。
- **统一接口**:这是REST最知名和最重要的约束。通常,RESTful API仅支持四种标准CRUD方法(插入、更新、删除和查询,在HTTP中分别为PUT、POST、DELETE和GET),关注支持客户端/服务器事务的基础设施(不可靠、异步网络)的性质,与其他远程技术(如COM、CORBA和SOAP)的API有很大不同。
#### 5. REST over HTTP
在互联网中,HTTP是REST风格的首选协议,因为它本身就是RESTful的。REST到HTTP的映射细节如下:
- **URIs**:互联网上几乎所有RESTful API都使用URI命名资源,其结构定义在RFC 3986中,典型结构如下:
```plaintext
http[s]://<host>[:<port>]/(<path-seg>/)*<path-seg>[?<param>=<value>(&<param>=<value>)*]
```
- **方案**:RESTful协议中URI的方案很可能是 `http://` 或 `https://`。
- **权限**:可能是请求目标服务的源服务器的DNS名称,除主机名外,还可能包含目标主机上服务器接受连接的端口号。
- **路径**:是标准的斜杠分隔(`/`)分层命名空间,用于标识服务维护的特定资源。
- **查询**:若存在查询部分,以问号(`?`)开头,后面是由与号(`&`)分隔的一个或多个键/值对
0
0
复制全文
相关推荐










