9.4 存储在云端
在本章的前几节中,介绍的数据存储方式都是基于本地存储设备的,这些方式都有一个弊端,就是数据的可靠性和设备一致性难以保证。当用户卸载应用或者更换设备时,可能会导致存储在本地设备中的数据丢失。而在用户更换了新的设备或重新安装应用后,之前的设置和产生的数据都无法延续。
因此,对于应用而言,为了保证数据存储的安全,都需要进行数据备份操作,将存储在本地的数据暂存在其他存储设备上,或者通过网络存储在服务器中。但这两种方式都有其弊端,比如,转移到其他的存储设备中,往往需要用户主动通过数据线或蓝牙等传输手段进行备份,难以掌握,而且手续繁琐,一旦操作不慎就会丢失或破坏备份数据。而通过网络进行后台数据备份,需要维护大量的数据同步逻辑,从而增加开发成本,同时需要标识数据的身份,建立独立的帐号系统,用户使用的门槛很高。
为了帮助开发者更好地进行安全的数据存储,Android提供了一种新的数据备份模式,便是将数据存储在云端。
9.4.1 云端存储的架构
本质上而言,云端存储就是通过网络将移动设备上的数据存储到远端服务器上,但在Android中,增加了一些辅助机制,使得整个流程的实现变得更为简单。
首先是通过Google帐号来标识用户身份。在Android设备上,默认支持使用Google帐号作为用户身份的标识,系统上各个应用都可以通过帐号系统获得用户的登录信息。利用Google帐号,使得开发者不需要构建额外的帐号系统。
其次,有了Google帐号的身份验证,就可以将应用中的数据存放到Google提供的云端服务上,从而使得开发者不需要自行构建后台服务系统。
此外,Android将云端存储的支持融入到了应用的生命周期中,使得开发者可以更为便捷地将数据存储到云端。
Android的云端数据存取,由系统服务BackupManagerService来统一管理。当应用提交备份数据请求时,BackupManagerService会将该请求放入备份队列中,该队列会按照一定的控制逻辑定时提交到云端。当有新应用安装到系统中时,会触发数据恢复事件,BackupManagerService会凭借应用包名和用户帐号从云端取出对应的备份数据,尝试恢复。整个流程如图9-4所示。
在实践中,应用也可以主动请求进行数据恢复,Android会在请求者与BackupManager-Service之间建立IPC通信信道,以便及时通知调用者数据恢复的相关事件。
图 9-4 云端备份和数据流程恢复