Android数据备份(Android Data Backup)

最近我在阅读Android Developer上的文章,本文是对其中一篇Data Backup的翻译。希望可以通过翻译英文技术文章提高自己阅读英文文档的水平,如果有不妥的地方,希望指出,谢谢~因为这个涉及到google服务,可能目前在国内大家不怎么去使用它。

Android的备份服务为了给我们的应用数据和配置提供还原的功能,它允许我们把我们的应用数据拷贝到远程的“云”存储上去。如果一个用户在他的手机上恢复了出厂设置或者换了一部新的Android设备,当开发者的应用被重新安装的时候,系统将会自动修复你的已经备份的数据。通过这个方式,你的用户没必要去重新生成以前的数据或者应用的配置。这个过程是完全透明的并且将不会影响你的App的功能或者用户体验。

在备份操作的过程中(你的应用可以请求的操作),Android的备份管理(BackupManager)去查询你的应用的备用数据,并且将数据提交给备份传输,备份传输将会帮我们把数据发送给云存储。在我们恢复数据的操作过程中,Android备份管理从我们的备份传输中去恢复数据并且把数据返回到我们的应用以便应用可以在设备上去恢复数据。对你的应用来说,要求数据的还原是可能的,但是这个操作不应该是必要的-当你的应用被安装时,Android会自动进行还原操作并且还原与用户有关的备份数据。备份数据还原的主要场景是:当用户重置了他们的设备或者使用了一个新的Android设备,同时他们之前已经安装过的应用需要重新安装。

注意:备份服务不是为与其他客户端同步应用数据或者用于存储在应用的运行周期内使用的数据而设计的。你不能立即(随时)读写备份数据并且除了通过Android备份管理提供的API之外,其他途径都不能访问备份数据。

备份传输是Android备份框架的客户端组件,它可以被设备厂商和服务提供者所定制。在不同设备上备份传输可能是不同的,并且在任何给定的设备上哪种备份传输是可用的对于我们的应用来说是透明的。备份管理的API把你的应用和在给定设备上可用的实际的备份传输分隔开来-你的应用通过一组固定的API与Android传输管理组件通讯,而不是直接去操作底层的未封装的传输。

Android数据备份并不保证在每个Android设备上都是可用的。但是,当设备不支持备份传输的时候,并不会对我们的应用产生什么不利的影响。如果你相信用户将会在你的应用中从数据备份功能获益,你可以像在文档中描述的那样去实现它,测试它,发布你的应用,而不用去关心每个Android设备数据备份的具体实现。当你的应用在不支持Android数据备份的设备上运行时,你的应用可以正常运行,但是将不再接收从Android备份管理到备份数据的回调。

尽管你可能不知道目前备份所使用的是哪一种传输,有一点是可以确定的:你的备份数据 不会被同一个设备上的其它App所读取。在你的备份操作期间,只有Android备份管理和相应的备份传输有权限去读取你的数据。

提示:因为在每部设备上的云存储和传输服务都可能是不同的,当你使用备份的时候,Android不会保证你的数据的绝对安全性。当使用备份去存储例如用户名和密码这样的敏感数据的时候,你通常都要保持谨慎。

基础

为了备份你的应用数据,你需要去实现一个备份代理(backup agent)。备份管理调用你的备份代理去提供你想备份的数据。当应用被重新安装的时候,备份代理同样被调用去还原你的备份数据。备份管理处理所有与云存储交互的数据(使用备份传输),并且你的备份代理处理你的设备上的所有的数据事务。

为了实现备份代理,你必须:

1.在 manifest文件里用android:backupAgent属性声明你的备份代理。
2.为你的应用注册一个备份service。Google为大部分Android设备提供了Android Backup Service 作为我们的备份service,我们必须要在我们的应用里注册它才能确保service的使用。任何其他可用的备份服务将也有可能需要你去注册以便你在它们的服务器上存储你的数据。
3.通过以下的方式都可以定义备份代理:
a.扩展备份代理(Extending BackupAgent):
BackupAgent类提供了核心接口用于你的应用与备份管理的通信。如果你直接扩展了这个类,你必须重写onBackup()onRestore()方法去处理备份和还原你的数据。

b.扩展备份代理辅助类(Extending BackupAgentHelper):
BackupAgentHelper类为BackupAgent类提供了便捷的包装,它最大程度地减少了你所要写的代码量。在BackupAgentHelper里,你必须使用一个或多个”helper”对象,它会自动备份和还原某种类型的数据。所以你不必一定实现onBackup()onRestore()方法。
Android目前提供了备份帮助类,它会从SharedPreferencesinternal storage中去备份和还原完整的文件。

在你的Manifest里声明备份代理

这是最简单的一步,所以一旦你确认了你的备份代理类的名称,在Manifest文件的<application>标签里用android:backupAgent属性去声明它。

例如:

<manifest ... >
    ...
    <application android:label="MyApplication"
                 android:backupAgent="MyBackupAgent">
        <activity ... >
            ...
        </activity>
    </application>
</manifest>

另一个你可能会使用的属性是android:restoreAnyVersion。这个属性使用一个boolean值去表明你是否想去还原应用的数据,而不管产生备份数据的版本和当前版本的比较。(它的默认值是false)。请看检查还原数据的版本获取更多信息。

注意:因为你使用的备份服务和 API只有在API版本8(Android 2.2)或更高的时候是可用的,所以你必须同时设置你的android:minSdkVersion 属性为8。

注册Android备份服务

对于大部分2.2或以上的设备来说,Google提供了带Android Backup Service的备份传输。
为了使你的应用能够使用Android备份服务( Android Backup Service),你必须在你的应用里注册一个带 Backup Service 秘钥的service,并且在你的Manifest文件里声明这个秘钥。
为了获取你的备份服务秘钥,你需要注册Android备份服务。当你注册后,你会得到一个秘钥和一段 XML代码,你必须把它们用标签包含起来。例如:

<application android:label="MyApplication"
             android:backupAgent="MyBackupAgent">
    ...
    <meta-data android:name="com.google.android.backup.api_key"
        android:value="AEdPqrEAAAAIDaYEVgU6DJnyJdBmU7KLH3kszDXLv_4DIsEIyQ" />
</application>

android:name必须是”com.google.android.backup.api_key”,并且android:value必须是从Android备份服务注册得到的秘钥才可以。

如果你有多个应用,你必须使用各自的包名去注册每一个应用以便使用Android的备份服务。

注意:由android备份服务提供的备份传输并不是在所有Android设备上都是保证能使用的。有的设备使用另一种方式支持备份,有的设备完全不支持备份,并且你的应用不会知道你在当前设备上使用的是哪种传输。但是,如果你为你的应用实现了备份,你通常应该保留一个备份服务秘钥以便你的应用能够使用可用的Android备份传输服务。如果你的设备不能使用Android备份服务,”< meta-data >” 里的带秘钥的元素将会被自动忽视。

扩展备份代理(Extending BackupAgent&#x

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值