演讲一:郭振,Android账户同步备份机制

设计账号同步备份软件的目的在于不希望重复输入,从而有效降低终端用户的使用成本。在设计盛大的产品时,主要考虑到了以下几点功能需求:

  • 设计盛大服务统一入口:盛大账户,共享登陆成果
  • 将通讯录和日历信息同步到服务器上
  • 将短信,系统设置等信息备份到存储卡

稍后郭振介绍了PIM同步设计:同步服务器、协议以及客户端等数据。由此引申出了同步管理框架:

  • 处理基于账户的信息同步
  • 只负责调度控制各同步流程,具体协议,服务,操作各App自行开发
  • Gmail的通讯录,Calendar同步,FaceBook自动更新

基于账户管理和PIM信息同步服务,Framework提供了Sync框架,Sync框架的主要结构如下:

图1.1  Sync框架结构图

如上图所示,通过一个队列管理各种应用发起的同步操作,通过AlarmManager控制队列中的各同步操作何时进行,通过SyncStorageEngine记录同步时连接服务器所需的认证信息,并且记录同步的状态,由于各应用同步操作的实现是不同的,因此具体Sync需要App自行实现。

接下来郭振还分享了Google数据备份的设计:

图2.1 Google数据备份设计

在备份过程中(应用程序可发起请求),Android的备份管理器(BackupManager)将查找应用程序中需备份的数据,并把数据交给备份传输器,传输器再把数据传送给云存储。在恢复时,备份管理器从备份传输器取回备份数据并将其返回给应用程序,然后应用程序就能把数据恢复到设备上。

应用程序也能够发起恢复请求,但不是必须的——如果程序安装完毕且存在用户相关的备份数据,Android会自动执行恢复操作。恢复备份数据主要发生于以下场合:用户重置设备或者升级到新设备后,以前装过的应用程序又被再次安装。

备份传输器是Android备份框架的客户端组件,它可由设备制造商和提供商定制。备份传输器可以因设备不同而不同,对于应用程序而言它是透明的。备份管理器的API将应用程序和实际备份传输器联接起来——程序通过一组固定的API与备份管理器进行通讯,而不必关心底层的传输过程。

为了备份应用程序数据,需要实现一个备份代理。此备份代理将被备份管理器调用,用于提供所需备份的数据。当程序重装时,还要调用此代理来恢复数据。备份管理器处理所有与云存储之间的数据传输工作(利用备份传输器),备份代理则负责所有对设备上数据的处理。