15

我想使用Android 备份服务备份我的应用程序的数据,但我担心网络使用情况。我有大约 500KB 的数据需要为每个备份操作上传。不多,但如果每天备份 10 次,可以轻松达到 5MB。

我的问题是,Android 决定何时以及多久执行一次备份?在我致电dataChanged(). 它没有解释什么条件构成了“时机”。

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

4

2 回答 2

13

您的问题有两个部分:

  1. 什么时候
  2. 多常

让我们从#2开始,多久一次。我认为文档足以回答这个问题。每当您的应用程序调用该dataChanged()方法时,就有可能进行备份。因此,谨慎地限制调用此方法的频率。如何处理这取决于您。您可能要考虑的一种方法是仅在应用程序中的重大/重要数据更改时调用它。也就是说,不要调用它来更改用户偏好(例如背景颜色),但要调用它来处理任何类型的事务数据。

至于#1,when : 这很难准确回答。该文档对此不置可否。这使 Android 可以自由更改此算法,而不会违反任何开发人员的期望。我认为以下假设是合理的:备份可能会很快发生,可能在条件合适的最快时间发生。如果它没有“很快”发生,那么它不会是一项非常有用的服务,不是吗?Android 可能会等待一些简单的条件(只是猜测,但这可能是可用线程、可用网络连接而没有其他网络活动)。请注意,文档声明“它将使用设备上启用的任何传输方式进行备份”。听起来它旨在使备份尽早进行。

于 2015-01-03T04:48:25.223 回答
2

我进一步研究了 Android Backup Manager Service 并发现了以下内容:

  1. 根据 http://developer.android.com/guide/topics/data/backup.html中的“请求备份部分” “如果您连续多次调用 dataChanged(),在备份管理器向您的代理请求备份之前,您的代理仍然只收到一个 onBackup() 调用。”

我将此解释为我们应用程序中的每个 DataChanged() 调用通过传输通知备份管理器服务。备份管理器服务只会对我们应用程序的备份代理的 onBackup() 执行一次调用,即使在备份管理器服务想要响应之前多次调用 DataChanged(请参阅下面关于备份管理器响应频率的第 2 项)。

  1. 根据这个测试器(我刚才还进行了备份频率测试):https ://advancedweb.hu/2014/12/09/practical_measurement_of_the_android_backup_manager/ 备份管理器服务每小时响应一次(我也在测试中证明了这一点)只要因为自上次数据备份以来的一小时内至少调用了一个 DataChanged()。
于 2016-02-11T23:06:23.420 回答