自从Android 6.0(API 23)以来,Android已经提供了自动备份应用程序功能,作为开发人员快速添加备份功能到他们的应用程序的一种方式。 自动备份通过将应用数据上传到用户的Google云端硬盘帐户,保护用户的Google帐户凭据。 数据量限制在每个应用程序用户25MB,并且存储备份数据的费用是免费的。

一、备份的文件

默认情况下,自动备份在系统分配给您的应用程序的大多数目录中包含文件:

1、共享首选项文件

2、getFilesDir()返回的目录中的文件。

3、由getDatabasePath(String)返回的目录中的文件,其中还包括使用SQLiteOpenHelper类创建的文件。

4、使用getDir(String,int)创建的目录中的文件。

5、getExternalFilesDir(String)返回的目录中的外部存储上的文件。

自动备份不包括由getCacheDir(),getCodeCacheDir()或getNoBackupFilesDir()返回的目录中的文件。 保存在这些位置的文件只能暂时使用,或有意从备份操作中排除。

您可以将应用程序配置为包括和排除特定文件。 有关详细信息,请参阅“包括和排除文件”部分。

二、备份位置

备份数据存储在用户的Google云端硬盘帐户中的私人文件夹中,每个应用限制为25MB。 保存的数据不会计入用户的个人Google云端硬盘配额。 只存储最近的备份。 进行备份时,先前的备份(如果存在)被删除。

用户可以在“设置” - >“应用程序自动备份” - >“管理备份”下查看已在Google云端硬盘应用中备份的应用列表。 用户或设备上的其他应用程序无法读取备份数据。

来自每个设备设置生命周期的备份存储在单独的数据集中,如以下示例所示:

1、如果用户拥有两个设备,则每个设备都存在备份数据集。

2、如果用户恢复出厂设置,然后使用相同的帐户设置设备,备份将存储在新的数据集中。 过期数据集在一段时间不活动后自动删除。

注意:如果数据量超过25MB,系统将触发onQuotaExceeded(long,long)回调,并且不将数据备份到云端。 系统会定期检查数据量是否晚于25MB阈值,并继续自动备份。

三、备份时间表

当满足以下所有条件时,会自动进行备份:

1、用户已在“设置”>“备份和重置”中启用设备上的备份。

2、自上次备份至少24小时以上。

3、设备空闲并充电。

4、该设备已连接到Wi-Fi网络。 如果设备从未连接到WiFi网络,则永远不会出现自动备份。

在实践中,这些情况大概每天晚上发生。 为了节省网络带宽,仅当应用数据发生变化时才会进行上传。

在自动备份期间,系统将关闭应用程序,以确保其不再写入文件系统。 默认情况下,备份系统忽略在前台运行的应用程序,因为用户会注意到他们的应用程序正在关闭。 您可以通过将backupInForeground属性设置为true来覆盖默认行为。

为了简化测试,Android包括可以手动启动应用程序备份的工具。 有关详细信息,请参阅测试备份和还原。

四、恢复时间表

无论何时安装应用程序,无论是从Play商店,在设备设置期间(系统安装以前安装的应用程序)还是运行adb安装,都会恢复数据。 恢复操作发生在APK安装之后,但应用程序可用于由用户启动之前。

在初始设备设置向导期间,用户将显示可用备份数据集的列表,并询问哪个数据从哪个还原数据。 选择哪个备份数据集将成为设备的祖先数据集。 设备可以从其自己的备份或祖先数据集恢复。 如果来自这两个来源的备份可用,设备将优先考虑其自己的备份。 如果用户没有通过设备设置向导,则设备只能从其自己的备份中恢复。

为了简化测试,Android包括可以手动启动应用程序还原的工具。 有关详细信息,请参阅测试备份和还原。

五、启用和禁用备份

针对Android 6.0(API级别23)或更高版本的应用程序自动参与自动备份。 这是因为android:allowBackup属性,启用/禁用备份,如果省略,则默认为true。 为避免混淆,我们建议您在AndroidManifest.xml的<application>元素中显式设置属性。 例如:

<application ...android:allowBackup="true">
</app>

要禁用自动备份,请将android:allowBackup设置为false。 当您的应用程序可以通过其他机制重新创建状态或者当您的应用程序处理不应备份的敏感信息时,您可能需要禁用备份。

六、包括和排除文件

默认情况下,系统备份几乎所有的应用程序数据。 有关详细信息,请参阅备份的文件。 本节介绍如何定义自定义XML规则来控制备份。

1、在AndroidManifest.xml中,将android:fullBackupContent属性添加到<application>元素。 此属性指向包含备份规则的XML文件。 例如:

<application ...android:fullBackupContent="@xml/my_backup_rules"></app>

2、在res / xml /目录中创建一个名为my_backup_rules.xml的XML文件。 在文件中,添加规则与<include>和<exclude>元素。 以下示例备份除device.xml之外的所有共享首选项:

<?xml version="1.0" encoding="utf-8"?>
<full-backup-content><include domain="sharedpref" path="."/><exclude domain="sharedpref" path="device.xml"/>
</full-backup-content>

一)、XML配置语法

配置文件的XML语法如下所示:

<full-backup-content><include domain=["file" | "database" | "sharedpref" | "external" | "root"]path="string" /><exclude domain=["file" | "database" | "sharedpref" | "external" | "root"]path="string" />
</full-backup-content>

在<full-backup-content>标签内,您可以定义<include>和<exclude>元素:

1、<include> - 指定要备份的文件或文件夹。 默认情况下,自动备份几乎包含所有应用程序文件。 如果指定了<include>元素,则系统默认不再包含任何文件,并且仅备份指定的文件。 要包含多个文件,请使用多个<include>元素。
注意:getCacheDir(),getCodeCacheDir()或getNoBackupFilesDir()返回的目录中的文件总是被排除,即使您尝试包含它们。

2、<exclude> - 指定在备份期间要排除的文件或文件夹。 以下是通常从备份中排除的一些文件:

1)、具有设备特定标识符的文件,由服务器颁发或在设备上生成。 例如,Google Cloud Messaging(GCM)需要在每次用户在新设备上安装您的应用程序时生成注册令牌。 如果旧的注册令牌已恢复,应用程序可能会出现意外。

2)、账户凭证或其他敏感信息。 考虑要求用户在第一次启动还原的应用程序时重新认证,而不是允许在备份中存储此类信息。

3)、与应用程序调试相关的文件,如即时运行文件。 要排除即时运行文件,请添加规则<exclude domain =“file”path =“instant-run”/>

4)、导致应用超出25MB备份配额的大文件。

注意:如果您的配置文件指定了这两个元素,则备份包含由<include>元素捕获的所有内容减去<exclude>元素中命名的资源。 换句话说,<exclude>优先。

每个元素必须包含以下两个属性:

1、domain - 指定资源的位置。 此属性的有效值包括以下内容:

1)、root - 存储属于此应用程序的所有私有文件的文件系统上的目录。

2)、文件 - 由getFilesDir()返回的目录。

3)、数据库 - 由getDatabasePath()返回的目录。 使用SQLiteOpenHelper创建的数据库存储在此处。

4)、sharedpref - 存储SharedPreferences的目录。

5)、外部由getExternalFilesDir()返回的目录。

注意:您无法备份这些位置之外的文件。

2、path:指定要从备份中包含或排除的文件或文件夹。 注意:

1)、此属性不支持通配符或正则表达式语法。

2)、您可以使用 . 引用当前目录,但是,出于安全考虑,您无法引用父目录。

3)、如果指定目录,则该规则适用于目录中的所有文件和递归子目录。

七、实现BackupAgent

实施自动备份的应用程序不需要实现BackupAgent。 但是,您可以选择实现自定义的BackupAgent。 通常,这样做有两个原因:

1、您想要接收备份事件的通知,例如onRestoreFinished()或onQuotaExceeded(long,long)。 即使应用程序未运行,也会执行这些回调方法。

2、您无法使用XML规则轻松表达要备份的一组文件。 在这些罕见的情况下,您可以实现一个替代onFullBackup(FullBackupDataOutput)的BackupAgent来存储所需的内容。 要保留系统的默认实现,请使用super.onFullBackup()调用超类上的相应方法。

如果您实现了BackupAgent,默认情况下,系统期望您的应用程序执行键/值备份和恢复。 要使用基于文件的自动备份,请在应用程序的清单中将android:fullBackupOnly属性设置为true。

在自动备份和还原操作期间,系统以受限模式启动应用程序,以防止应用程序访问可能导致冲突的文件,并让应用程序在其BackupAgent中执行回调方法。 在这种限制模式下,应用程序的主要活动不会自动启动,其内容提供者未初始化,基类应用程序已被实例化,而不是在应用程序的清单中声明的任何子类。

注意:为避免错误,请确保以受限模式执行的应用程序部分(大部分是您的BackupAgent)不会访问同一应用程序中的内容提供程序或尝试投射Application对象。 如果您无法避免这些模式,请考虑实施Key / Value备份或完全禁用备份。

注意:您的BackupAgent必须在Backup()和onRestore()上实现抽象方法。 这些方法用于键/值备份。 因此,如果您不使用Key / Value 备份,请执行这些方法并将其留空。

有关详细信息,请参阅扩展BackupAgent。

数据存储:数据备份:自动备份相关推荐

  1. oracle如何异地备份软件,数据库Oracle数据的异地的自动备份

    数据库Oracle数据的异地的自动备份以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 正在看的ORACLE教程是:数据库 ...

  2. Android的数据存储和IO - 自动朗读(TTS)

    Android的数据存储和IO - 自动朗读(TTS) 自动朗读又是Android提供的另一种另类的IO,蛮不错的哦,支持对指定文本内容进朗读,学习完这个内容我立马就让它朗读:wwj is a goo ...

  3. oracle备份数据脚本,oracle数据库自动备份脚本

    ::通过exp命令导出远程机器(192.168.2.1)上指定服务(orcl)指定用户(pmis)及密码(pmis)的数据 ::运行该脚本的机器必须安装oracle @echo off @echo [ ...

  4. Android数据存储---数据备份(Data Backup)(三)

    继承BackupAgentHelper类 如果要备份完整的文件(既可以是SharedPreferences文件也可以是内部存储文件),那么就应该使用BackupAgentHelper类来构建备份代理. ...

  5. mysql数据库备份自动备份_设置mysql数据库自动备份

    由于项目需要,在windows下的mysql实现数据库自动备份.经资料查询和尝试,得出方法有两种: 1.使用windows自带的任务计划,然后定时执行一个数据库备份的脚本. 2.使用mysql管理工具 ...

  6. sql backup database备份d盘_Oracle-备份与恢复(二)RMAN备份-自动备份计划任务脚本...

    rman 备份执行脚本 rman 基于块备份 #! /bin/bash # # LEVEL0 包含自動刪除archivelog并記錄相關日志 # # crontab -l # 0 2 * * * /h ...

  7. VSAN报错:该主机的VSphere HA 检测信号数据存储数据为1,少于要求数目:2

    VSPHERE HA存储掉线1个,系统自动报警,所有节点都会报警,知道如何处理了吗?

  8. IOS数据存储之文件沙盒存储

    前言: 之前学习了数据存储的NSUserDefaults,归档和解档,对于项目开发中如果要存储一些文件,比如图片,音频,视频等文件的时候就需要用到文件存储了.文件沙盒存储主要存储非机密数据,大的数据. ...

  9. 如何自动备份指定文件扩展名的文件?

    关于文件扩展名 文件扩展名,一个点后跟几个字母,例如".doc"或".jpg",构成计算机文档名称的结尾.保存文档时,请务必在单击"保存"之 ...

  10. 1211笔记关于//modal//更改窗口的根控制器//数据存取//Plist属性列表//-“沙盒机制”//plis属性列表//偏好设置//归档普通对象//联系人数据存储//协议与回调函数...

    笔记的完整版pdf文档下载地址:https://www.evernote.com/shard/s227/sh/aba2aa01-4d96-429d-9bbd-2f285c7c0c79/65772262 ...

最新文章

  1. 泛型java 代码讲解_Java泛型详解
  2. 密度聚类算法DBSCAN实战及可视化分析
  3. [导入]WindowsXp的两个问题:
  4. 算法提高课-搜索-DFS之搜索顺序-AcWing 1117. 单词接龙:dfs
  5. 李彦宏妻子马东敏向中国科大捐赠1亿 成立蔷薇基金
  6. SAP Spartacus SSR模式启用失败的一个原因:SSR rendering exceeded timeout
  7. Lua中的metatable
  8. java 死锁 解决_Java死锁故障排除和解决
  9. CSS的position属性:relative和absolute
  10. Hive系列(一)metastore的认证和授权
  11. 解线性方程组的迭代法(雅可比、高斯-塞德尔迭代法)
  12. 爬取豌豆荚app数据(总结篇)
  13. 如何关闭极域课堂(亲测有效)(含下载链接)
  14. OpenCV-python安装教程
  15. java处理环比增长率
  16. git 删除历史记录
  17. js 去掉浏览器打印默认的页头页尾和打印背景图片
  18. android usb 键盘,android4.4 修改USB外接法语键盘
  19. CTFHub 技能树web
  20. Yolov5 Tensorrt win10 C++ 部署2022

热门文章

  1. 2020年磺化工艺模拟考试系统及磺化工艺模拟考试软件
  2. 变频器的逆变、变频原理
  3. U盘数据丢失该如何快速恢复?迅米数据恢复软件帮你快速解决难题!
  4. 物料称重管理系统灵活构建个性化应用场景
  5. 煤炭及煤化工加工会产生什么危废_煤化工危废处理新趋势:园区建设集中处理装置...
  6. CPU热测试_经验案例
  7. home staging_楼市风向不定,让你跌破眼镜的奇葩Home Staging(房屋装饰升级),简直惨不忍睹!有图有真相!...
  8. 计算机网络在教学方面的作用是什么意思,浅谈发挥网络在教学中的作用
  9. linux内核添加spi驱动,Linux内核驱动之spi子系统spi协议.docx
  10. 帝国理工计算机科学硕士,帝国理工计算机硕士介绍