Activity 和 ContactsReceiver 的类图,以及他们
工作机制中涉及到的类的结构。
图 5. 本地备份恢复类图
* Intent 在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调 用者之间的解耦 .
* 此处的 IntentFilter 起动态
注册 action, 使之用于接收同 action 的广播消息 IntentFilter
commandFilter = newIntentFilter();
commandFilter.addAction("signal");
registerReceiver(BroadcastReceiver, commandFilter);
BroadcastReceiver 用来接收和响应广播消息
* Handler 主要接受子线程发送的数据 , 并用此数据配合主线程更新 UI.
* ContactsReceiver 调用 Thread 开启一个线程 , 用以接收由 BackupRestoreActivity 发出的备份 / 恢复信号。
* NetToolHandler(用于网络备份恢复)定义了一些用来和服务器进行交互的方法;IHttpResponse 是在 NetToolHandler 中定义的一个内部接口,主要用来回调 NetToolHandler 中返回的信息,根据返回的信息进行下一步操作。
用户选择本地备份或者本地恢复,ContactsReceiver 则收到广播消息后,根据信号判断操作的类别是备份还是恢复,然后启动一个线程,在线程中调用 Handler,通过 Handler 去处理读写数据。
网络备份恢复
服务器端设计与实现
网络备份通过 WiFi 或者 GPRS 在手机端与服务器进行连接,服务器提供相应的接口,用于上传或下载文件。
服务器端用例分析
1) 备份数据上传:响应客户端的 backup 功能。文件通过 HTTP 请求提交到服务器,服务器接收文件并保存,序列图表示如下:
图 6. 网络备份恢复上传序列图
说明:如果 Servlet 检查到输入参数不合法,会中断服务并通知客户端。
接口定义:
URL:https://
:/upload?uuid=< 上传文件的 uuid>&name=< 真实文件名 >&md5= 8b1a9fbf5e111296a827abf8c47804d7&offset=< 偏移量 >&desc=< 文件描述信息 >&size=< 文件大小 >&deviceid=< 终端的 id>,HTTP 正文为上传的内容
表 1. 备份数据上传参数表
提交项 关键字 作用 格式 uuid uuid 方便上载失败后断点续传 , 客户端生成 文件名 name 上传文件名 MD5 校验码 md5 用于对上载文件作完整性校验。 16 进制格式,共 32 位长 偏移量 offset 断点续传的偏移量。 长整数,最小为 0,最大为文件字节数。 文件描述信息 desc 除用户名外的文件描述。 不能大于 256 个字符,否则抛出 400 错误 文件大小 size 用于断点续传功能建立文件时使用。 长整数 设备 id deviceid 用于一个用户多个设备进行网络备份恢复的依据
必须使用 POST 方式提交,且只允许上传一个文件
offset:客户端应从 offset( 包含 offset) 开始上传文件。offset=0 时,忽略 offset 参数。
如果是续传文件,应先用 uploadquery 接口查询文件已上传部分的大小,以获取 offset 的值
表 2. 备份数据上传返回值
成功
HTTP 头 HTTP Body 200 空
失败(包含公共错误)
HTTP 头错误码 HTTP Body (Xml 格式的错误消息) Code Message 400 MSG-1001 文件上传失败
2) 备份数据下载:响应客户端的网络恢复功能。根据文件名将用户请求的文件传递给客户端。序列图表示如下:
图 7. 网络备份恢复下载序列图
流程描述如下:
* 客户端向服务器发送 requestDownload 请求,请求中包含文件的 uuid 和断点续传的起始点。
* Servlet 调用 downloadSavedFile 接口 , 传递文件 uuid 和 range 参数。
* 数据库存取返回自 range 开始的字节流,字节流返回给前面的 servlet。
接口定义:
URL:https://:/fileDownload? uuid=< 文件标识 >&range=< 偏移量 > &deviceid=< 终端的 id>
参数含义同备份数据上传;客户端应从 ran