安卓备份服务 - 何时以及多久备份一次?

15
我想使用Android备份服务备份我的应用程序数据,但我担心网络使用情况。每次备份操作需要上传约500KB的数据。虽然不多,但如果每天执行10次备份,很容易达到5MB。
我的问题是,Android何时以及多久决定执行备份?文档只提到在调用dataChanged()后,“在将来的适当时间”进行备份,但没有解释何种条件构成“适当时间”。

您可以通过调用dataChanged()随时请求备份操作。此方法通知备份管理器,您希望使用备份代理备份数据。备份管理器会在未来的适当时间调用您的备份代理的onBackup()方法。


你找到答案了吗?也许,一些日志记录可以帮助收集一些统计数据。 - LA_
@Andree:我有同样的问题。你已经有答案了吗?对于我的情况,每次备份操作上传约1MB数据(用户本地sqlite数据)。 - LHA
@Loc Ha:抱歉,我没有。我会在这个问题上设置赏金以获得更多关注。 - Andree
2个回答

13
您的问题有两部分:
1. 何时进行备份? 2. 备份频率如何?
让我们从第2点“备份频率”开始。我认为文档已经充分回答了这个问题。每当您的应用程序调用`dataChanged()`方法时,都有可能进行备份。因此,限制调用此方法的频率是明智的。您可以自行决定如何处理。您可能希望考虑一种方法,仅对应用程序中重要数据的更改调用此方法。也就是说,不要针对用户偏好(例如背景颜色)的更改调用它,但是对于任何事务性数据,请调用它。
至于第1点“何时进行备份”,这就更难回答了。文档对此没有明确说明。这使得Android可以自由更改此算法,而不会违反任何开发人员的期望。我认为以下假设是合理的:备份很可能会快速完成,可能在适当的条件下尽快进行。如果备份没有“很快”完成,那么它将不是一个非常有用的服务,对吧? Android可能会等待一些简单的条件(只是猜测,但这可能是可用线程、可用网络连接且没有其他网络活动)。请注意,文档指出“它将使用设备上启用的任何传输进行备份”。这听起来像是为了尽早完成备份而设计的。

很好的回答,对于一个广泛而困难的问题(因为文档没有说明,所以只有 Google 真正知道)。我同意你的两个观点。 - shkschneider
1
它发生的频率实际上取决于Android的版本。在Android L之前,第一次备份通常会在设备设置后约12小时左右进行;然后,在此之后,备份将在任何应用程序调用dataChanged()后的约1小时内进行。在Android的较新版本中,情况已经放松了一些;现在从dataChanged()到实际运行备份大约需要4个小时。这是针对旧的键/值API的。在Android M中新增的完整数据备份仅在设备处于空闲状态且已连接到wifi时运行。 - ctate

2
我进一步研究了Android备份管理器服务,并发现以下内容:
1. 根据http://developer.android.com/guide/topics/data/backup.html中的“请求备份部分”,如果在Backup Manager从您的代理请求备份之前连续多次调用dataChanged(),则您的代理仍然只会收到一个onBackup()调用。
我解释为我们应用程序中的每个DataChanged()调用都通过传输通知备份管理器服务。即使在Backup Manager Service在想要响应时多次调用DataChanged,它也只会执行一次对我们应用程序的备份代理的onBackup()调用(请参见下面的备份管理器响应频率第2点)。
2. 根据这个测试者(我刚刚进行了备份频率测试):https://advancedweb.hu/2014/12/09/practical_measurement_of_the_android_backup_manager/,只要在上次数据备份后的一小时内至少调用了一次DataChanged(),备份管理器服务就会每小时响应一次(我也在我的测试中证明了这一点)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接