【Android Developers Training】 88. 使用备份

系统 1754 0

注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好。

原文链接: http://developer.android.com/training/cloudsync/backupapi.html


当用户购置了一个新的设备并且重置了他们现有的设备时,他们可能期望当Google Play在初始化阶段将应用恢复出来后,能够同时把相应的数据也恢复出来。默认的,这样的事情不会发生,用户的进度和应用的配置都会丢失。

对于一些轻量的数据(小于一兆的),比如用户的配置,记录,游戏的最高分或其他类似的数据,备份API提供了一种轻量级的解决方案。这节课将会教你如何将备份API集成到你的应用当中,并使用它来恢复数据


一). 注册Android备份服务

这节课需要使用Android备份服务( Android Backup Service ),它需要注册(注册请点击: register here )。一旦注册完成,会生成一个XML标签,将它插入你的Android配置清单中,看上去像是这样:

      
        <
      
      
        meta-data 
      
      
        android:name
      
      
        ="com.google.android.backup.api_key"
      
      
        

android:value
      
      
        ="ABcDe1FGHij2KlmN3oPQRs4TUvW5xYZ"
      
      
        />
      
    

注意每个备份key对应于一个包名。如果你有不同的应用,需要为每个应用注册不同的key。


二). 配置你的清单文件

使用Android备份服务需要在你的配置清单中添加两项。首先声明执行备份代理功能的类名,然后将上述的标签作为<Application>的子标签添加进来。假设备份代理叫做“ TheBackupAgent ”,下面就是相应的例子配置文件大致的样子:

      
        <
      
      
        application 
      
      
        android:label
      
      
        ="MyApp"
      
      
        

             android:backupAgent
      
      
        ="TheBackupAgent"
      
      
        >
      
      
        

    ...

    
      
      
        <
      
      
        meta-data 
      
      
        android:name
      
      
        ="com.google.android.backup.api_key"
      
      
        

    android:value
      
      
        ="ABcDe1FGHij2KlmN3oPQRs4TUvW5xYZ"
      
      
        />
      
      
        

    ...


      
      
        </
      
      
        application
      
      
        >
      
    

三). 编写你的配置代理

创建你的备份代理最简单的方法是继承包装类 BackupAgentHelper 。创建这一辅助类其实是一个非常简单地过程。只需要创建一个名字和之前你在清单文件中声明的那个类相同的类(比如, TheBackupAgent ),然后继承“ BackupAgentHelper ”,在覆写 onCreate() 方法就行了。

onCreate() 方法中,创建一个 BackupHelper 对象。这些特定的类专门用来备份某种类型的数据。Android框架当前包含两种这样的类: FileBackupHelper SharedPreferencesBackupHelper 。当你创建了这个类的对象,并指出你想要备份的数据后,只需要使用 addHelper() 方法将它添加到 BackupAgentHelper中就行了,添加一个key,之后用它来恢复数据。在大多数情况下,整个实现只需要十几行代码。

下面是一个备份游戏最高得分文件的例子:

      
        import
      
      
         android.app.backup.BackupAgentHelper;

 
      
      
        import
      
      
         android.app.backup.FileBackupHelper;





 
      
      
        public
      
      
        class
      
       TheBackupAgent 
      
        extends
      
      
         BackupAgentHelper {

    
      
      
        //
      
      
         The name of the SharedPreferences file
      
      
        static
      
      
        final
      
       String HIGH_SCORES_FILENAME = "scores"
      
        ;



    
      
      
        //
      
      
         A key to uniquely identify the set of backup data
      
      
        static
      
      
        final
      
       String FILES_BACKUP_KEY = "myfiles"
      
        ;



    
      
      
        //
      
      
         Allocate a helper and add it to the backup agent
      
      
            @Override

    
      
      
        void
      
      
         onCreate() {

        FileBackupHelper helper 
      
      = 
      
        new
      
       FileBackupHelper(
      
        this
      
      
        , HIGH_SCORES_FILENAME);

        addHelper(FILES_BACKUP_KEY, helper);

    }

}
      
    

为了增加灵活性, FileBackupHelper 的构造函数可以接受数量可变的文件名。你可以仅仅通过增加一个参数的方法,同时备份最高分文件盒游戏进度文件,像这样:

      
            @Override

    
      
      
        void
      
      
         onCreate() {

        FileBackupHelper helper 
      
      = 
      
        new
      
       FileBackupHelper(
      
        this
      
      
        , HIGH_SCORES_FILENAME, PROGRESS_FILENAME);

        addHelper(FILES_BACKUP_KEY, helper);

    }
      
    

备份配置信息也很简单,和你创建 FileBackupHelper 的方法一样创建一个 SharedPreferencesBackupHelper 。在这个情况下,不是向构造函数添加文件名,而是添加你的应用所使用的 shared preference 组的名字。下面的例子展示了以配置信息的形式而非文件的形式存储最高得分时,你的备份代理帮助类实现可能的样子:

      
        import
      
      
         android.app.backup.BackupAgentHelper;

 
      
      
        import
      
      
         android.app.backup.SharedPreferencesBackupHelper;



 
      
      
        public
      
      
        class
      
       TheBackupAgent 
      
        extends
      
      
         BackupAgentHelper {

     
      
      
        //
      
      
         The names of the SharedPreferences groups that the application maintains.  These

     
      
      
        //
      
      
         are the same strings that are passed to getSharedPreferences(String, int).
      
      
        static
      
      
        final
      
       String PREFS_DISPLAY = "displayprefs"
      
        ;

     
      
      
        static
      
      
        final
      
       String PREFS_SCORES = "highscores"
      
        ;



     
      
      
        //
      
      
         An arbitrary string used within the BackupAgentHelper implementation to

     
      
      
        //
      
      
         identify the SharedPreferencesBackupHelper's data.
      
      
        static
      
      
        final
      
       String MY_PREFS_BACKUP_KEY = "myprefs"
      
        ;



     
      
      
        //
      
      
         Simply allocate a helper and install it
      
      
        void
      
      
         onCreate() {

         SharedPreferencesBackupHelper helper 
      
      =

                 
      
        new
      
       SharedPreferencesBackupHelper(
      
        this
      
      
        , PREFS_DISPLAY, PREFS_SCORES);

         addHelper(MY_PREFS_BACKUP_KEY, helper);

     }

 }
      
    

你可以添加任意多的备份帮助实例到你的备份代理中,但是要记住的是对每种备份的类型,你只能有一种。一个 FileBackupHelper 处理所有你要备份的文件,所有 SharedPreferencesBackupHelper 处理你需要备份的 shared preference组。


四). 请求备份

要请求一个备份,只需要创建一个 BackupManager 实例,然后调用它的 dataChanged() 方法:

      
        import
      
      
         android.app.backup.BackupManager;

 ...



 
      
      
        public
      
      
        void
      
      
         requestBackup() {

   BackupManager bm 
      
      = 
      
        new
      
       BackupManager(
      
        this
      
      
        );

   bm.dataChanged();

 }
      
    

这一调用会通知备份管理器已经有数据准备好备份到云端了。在未来的某个时间,备份管理器会调用你的备份代理的 onBackup() 方法。你可以在你的数据发生变化后的任何时间调用这个方法,而不必担心导致过量的网络传输。如果你在执行备份任务之前发起了两次备份请求,那么最终备份只会执行一次。


五). 从备份中恢复

一般来说你不需要人为的发起一个恢复请求,当你的应用安装到一个设备上后,恢复备份会自动执行。然而,如果有必要人为的激活一次恢复备份的话,只需要调用 requestRestore() 方法就行了。

【Android Developers Training】 88. 使用备份API


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论