Android---使用备份API



本文译自:http://developer.android.com/training/cloudsync/backupapi.html

当用户采购一款新的设备或重置他们现有的设备时,他们可能期望Google Play在把应用程序恢复到设备上的过程中,把之前与应用程序关联的数据也恢复到设备上。默认情况下,这种情况不会发生,并且应用程序中的所有的用户操作履历和设置都不会被恢复。

对于那些相对轻量级的数据(少于1Mb),如用户设置、注释、游戏成绩或其他的统计数据,备份API提供了一种轻量级的解决方案。本文讨论如何把备份API集成到你的应用程序中,并使用备份API把数据恢复到一个新的设备上。

注册Android的备份服务

本文需要使用Android的备份服务,它需要注册。注册地址:https://developer.android.com/google/backup/signup.html?hl=zh-CN&csw=1,注册成功之后,该服务会被包装在一个如下所示的XML标签中:

<meta-data android:name="com.google.android.backup.api_key"
android:value="ABcDe1FGHij2KlmN3oPQRs4TUvW5xYZ" />

你需要把这个标签插入到Android的清单文件中。需要注意的是,每个备份键对应一个特定的包名,如果是不同的应用程序,就要注册不同的备份键。

配置清单文件

使用Android的备份服务需要在你的应用程序清单文件中做两件事。第一,要声明用于备份代理的类,然后把上面的XML标签作为<Appliction>标签的子元素添加到清单文件中。假设你的备份代理类是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()方法内部,创建一个备份辅助器,备份辅助器是备份某种类型数据的专用类。Android框架当前包含了两种辅助器:FileBackupHelperSharePreferencesBackupHelper。创建辅助器,并把它指向要备份的数据之后,就要使用andHelper()方法把它添加给BackupAgentHelper类,这个方法还需要一个用于后续获取数据的键名。大多数情况下,整个实现大约需要10行代码,以下是一个备份高分值文件的例子:

import android.app.backup.BackupAgentHelper;
 import android.app.backup.FileBackupHelper;


 public class TheBackupAgent extends BackupAgentHelper {
    // The name of theSharedPreferences file
    static final String HIGH_SCORES_FILENAME = "scores";

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

    // Allocate a helper andadd 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辅助器。这时要用应用程序所使用的共享设置组来代替构造器中的文件名,示例如下:

import android.app.backup.BackupAgentHelper;
 importandroid.app.backup.SharedPreferencesBackupHelper;

 public class TheBackupAgent extends BackupAgentHelper {
     // The names of theSharedPreferences groups that the application maintains.  These
     // are the samestrings that are passed to getSharedPreferences(String, int).
     static final String PREFS_DISPLAY = "displayprefs";
     static final String PREFS_SCORES = "highscores";

     // An arbitrarystring used within the BackupAgentHelper implementation to
     // identify theSharedPreferencesBackupHelper's data.
     static final String MY_PREFS_BACKUP_KEY = "myprefs";

     // Simply allocate ahelper and install it
     void onCreate() {
         SharedPreferencesBackupHelper helper =
                 new SharedPreferencesBackupHelper(this, PREFS_DISPLAY,PREFS_SCORES);
         addHelper(MY_PREFS_BACKUP_KEY, helper);
     }
 }

在备份代理辅助器中,你可以添加很多备份辅助器的实例,但要记住,每种类型只需一个实例。即一个FileBackupHelper实例可用于处理所有需要备份的文件,一个SharedPreferencesBackupHelper实例可用于处理所有的需要备份的共享设置组。

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

import android.app.backup.BackupManager;
 ...

 public void requestBackup() {
   BackupManager bm = new BackupManager(this);
   bm.dataChanged();
 }

这个调用通知备份管理器有数据准备备份到云端。在接下来的某个时刻,备份管理器会调用备份代理的onBackup()方法。无论数据在什么时候发生改变,你都可以要求这个调用,而不用担心网络的过度使用。如果在备份发生之前,你申请了两次备份,那么备份只会发生一次。

从备份中恢复数据

通常,你不需要手动的要求恢复处理,当应用程序被安装到一个设备上时,它会自动发生。但是,如果需要手动的触发恢复操作,只需调用requestRestore()方法。

你可能感兴趣的:(Android---使用备份API)