Android M 新特性——应用数据自动备份功能

一.功能介绍

  Android m 的自动备份数据功能运用的是Android Backup Service,将数据备份到了google drive中。Android Backup Service其实在安卓2.2就已经有了。但一开始谷歌的备份服务并不是用来同步备份应用数据,而是为了方便用户可以在不同设备上获取到备份的数据。而现在,只要你的app数据发生变化,或者系统升级时,Android M的应用数据备份功能便会启动。所以应用可以随时恢复之前存储过的数据,即使是设备恢复过出厂设置或者更换了新的设备。这样,游戏会记得用户游戏过程中暂停的位置,而应用也能够保存登录信息和偏好设定。

  但自动备份功能也有一定的限制性

  一方面它每个app最多只能备份25MB的数据。原文如下:

  另一方面,对于使用谷歌云消息推送通知的应用程序,有一个已知的问题,即备份谷歌云信息注册返回的注册id会打破恢复的应用程序的推送。所以当app安装到一个新设备后,询问API从而获取到一个新的注册id是很重要的,但如果你把旧的注册id备份上去了,在新设备安装的这个app就不会再去询问API获取新的注册id了。所以为了避免这个问题,要在xml中的exclude标签里进行相应配置。通俗易懂点讲,一般设备的id信息是要根据设备生成的,不能用旧的。但如果你将之前的id信息也备份了上去,那新设备就不会去生成新的信息了。原文如下:

二. 关于备份

  自动备份服务支持通过XML配置文件和app manifest来设定备份规则。

在app manifest中,只需要一行代码来指定你要引入规则的xml文件(mybackupscheme为xml文件名)

  接着在xml中配置相应规则即可

  · <include>指定要备份的文件

  · <exclude>指定不备份的文件

  · domain指定文件类型

  · path 指定要备份的文件路径

  那么Android M是如何实现对app进行自动备份的呢,其实他是通过获取app的读写权限,读取app的app manifest从而在里面写入相关的备份配置。

三. 关于恢复

  数据需要恢复的时候,Backup Manager 会先调用requestRestore()方法从google drive把数据下载下来

  再调用onStore()方法将数据恢复到你的设备上。这个方法需要传三个参数

  · data: 一个 BackupDataInput,从而允许你读取到备份的数据

  · appVersionCode: 就是你应用里的android:versionCode属性值,用它可以来判断应用数据和云端备份的数据格式是否兼容。

  · newState:一个开放的,可读写的,指向保存着你最终的数据备份状态的文件的ParcelFileDescriptor. 这个对象将会在下一次调用onBackup的时候,以oldState的变量名返回。

  执行onStore()方法的时候,首先会调用readNextHeader()方法去遍历数据组中存在的所有实体。每找到一个实体,便会进行下列的操作:

  1. 用getKey()方法获取实体的key

  2. 将实体的key和你在BackupAgent类中声明的所有static final类型的key值比较,一旦和你现有的其中一个key值匹配,便会将从云端下载下来的数据提取出来并保存到你的设备上。

  保存数据用到了上图中的helper.restoreEntity()方法,他会将数据写入到和key匹配的文件中。

四. 我们能实现吗

  上文已经提到,谷歌实现自动备份,其实是获取了其他app的读写权限,在app里写入相应配置从而实现备份的。那为什么谷歌能获取到其他app的读写权限呢?因为他拥有系统权限,所有安装到他系统内的app他都拥有读写权限。但app与app之间是没法获取到对方的读写权限的。Android 应用借用了 Linux Sandbox技术,将不同 APP 之间做了隔离;APP 之间的隔离主要是资源隔离和权限访问隔离。虽然APP 权限机制为应用程序之间的资源互访提供了可行性,APP申请到权限并经过用户授权后可以访问其他程序的服务。但这需要两个app都在代码里面进行相应配置。首先要用相同的 private key 来签名从而保证两个app运行在同一个进程中,接着要自定义<permission> 标签到时询问用户是否要获取该app的读写权限。但这是不实际的,我们不可能同所有app合作,让他们在程序代码里都加入让我们获取他们读写权限的配置。

时间: 2024-11-09 08:51:15

Android M 新特性——应用数据自动备份功能的相关文章

Android N 新特性

2016年5月19日,谷歌在美国加州的山景城举办了 Google I/O 开发者大会中发布.2016年6月,Android N正式命名为"牛轧糖" 本届I/O开发者大会上,Google重点介绍了Android系统三个维度:分别是性能.安全和生产力.其中性能主要新增了Vulkan API与JIT编译器(前者优化图形性能.或者加快软件安装速度):安全性包括新的数据加密方式.恶意网站识别.系统的实时更新:生产力方面加入了分屏多任务功能.程序的快速切换,所有应用都可以支持"多窗口模式

Android Lollipop 新特性 - Palette;获取图片颜色

Android Lollipop 新特性 - Palette 在Android 5.0 之后推出的palette,通过这个方法,我们就可以从一张 bitmap 中提取我们需要的颜色,可以使UI风格更加美观融洽.比如,我们可以从图片中提取颜色设置给ActionBar做背景颜色,这样ActionBar的颜色就会随着显示图片的变化而变化. Palette可以提取的颜色如下: Vibrant (有活力的) Vibrant dark(有活力的 暗色) Vibrant light(有活力的 亮色) Mute

Android M新特性Doze and App Standby模式详解

参考: Optimizing for Doze and App Standby Android M新特性Doze and App Standby模式详解 深入android6.0 设备 idle状态 Android M 的 Doze 模式下第三方推送服务还能用吗? 一.Optimizing for Doze and App Standby 从Android6.0开始,Android提供了两种省电延长电池寿命的功能:Doze和App Standby: 表现形式:当设备没有连接到电源,设备进入Doz

重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件

原文:重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件 [源码下载] 作者:webabcd 介绍重新想象 Windows 8.1 Store Apps 之通信的新特性 下载数据(显示下载进度,将下载数据保存到本地) 上传数据(显示上传进度) 上传文件 示例HTTP 服务端WebServer/HttpDemo.aspx.cs /* * 用于响应 http 请求 */ using System; using System.IO;

【SharePoint学习笔记】第3章 SharePoint列表新特性以及数据访问

第3章 SharePoint列表新特性以及数据访问   使用CAML查询语言 CAML:协作应用程序标记语言 Collaboration Application Markup Language 使用Microsoft.SharePoint.SPQuery 对象查询列表数据 CAML语法: <Where> <And | Or> <Eq | BeginsWith | Contains | Geq | Gt | IsNotNull | IsNull | Leq | Lt | Neq

关于Linux/Unix数据自动备份工具

我们在编写程序的时候经常会需要对数据进行备份,那么就需要使用到自动备份工具,那么你对Linux/Unix数据自动备份工具了解有多少呢? 下面我们就一起去看看关于Linux/Unix数据自动备份工具的内容. primabackup.sh 说明文档 版本:2.0.1 0. 版本更新 * 2006-11-23 SWsoft.com.cn v2.0.2 - [fix] 修复resin路径 * 2005-03-28 ValueOf.com v2.0.1 - [fix] 备份resin和tomcat的配置

Atitit.aticmd&#160;v4&#160;&#160;新特性q39&#160;添加定时器释放功能

Atitit.aticmd v4  新特性q39 添加定时器释放功能 V1  实现兰cmd V2 标准输入,标准输出,标准错误与重新定向 V3  stdout stderr统一重新定向 V4  添加定时器释放功能 V5   兼容性的.net java php V6   bigfile output的solu  ,arg sh all total ret... 作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:

辛星和您关闭vim的自动备份功能

当我们使用gvim编辑文件的时候,会自动生成带~的备份文件,如果我们不想在编辑文件的时候自动生成备份文件的话,那么就需要修改其配置文件了,但是我在vimrc文件中没有找到相应的配置项,于是就发现应该在vim的安装目录下的74的vimrc_example.vim文件中进行修改,我们在它的第24行开始部分找到了如下代码: if has("vms") set nobackup " do not keep a backup file, use versions instead els

Oracle11g 新特性:优化Rman备份UNDO表空间

Oracle11gR1的新特性,Rman备份UNDO表空间时排除已经提交的会话对应的数据,提高了Rman备份的效率. 官方文档:http://docs.oracle.com/cd/B28359_01/server.111/b28279/chapter1.htm#AREANO02323 我们知道,UNDO表空间主要用于存储前镜像数据,这些数据在回滚以及恢复过程中可能被用到.但是一个生产数据库的UNDO表空间可能会变得非常巨大,而备份完整的UNDO数据文件在恢复时一般可能用到的比例很小. 测试一下: