Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android备份服务-何时以及多久备份一次?_Android_Android Backup Service - Fatal编程技术网

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

Android备份服务-何时以及多久备份一次?,android,android-backup-service,Android,Android Backup Service,我想使用备份应用程序的数据,但我担心网络使用情况。我有大约500KB的数据需要为每次备份操作上传。不多,但如果每天执行10次备份,很容易达到5MB 我的问题是,Android决定何时以及多久执行一次备份?在我调用dataChanged()之后,文档只提到“在将来的适当时候”。它没有解释什么条件构成了“适当的时间” 您可以随时通过调用来请求备份操作 dataChanged()。此方法通知备份管理器您希望 使用备份代理备份数据。然后是备份管理器 在中的适当时间调用备份代理的onBackup()方法

我想使用备份应用程序的数据,但我担心网络使用情况。我有大约500KB的数据需要为每次备份操作上传。不多,但如果每天执行10次备份,很容易达到5MB

我的问题是,Android决定何时以及多久执行一次备份?在我调用
dataChanged()
之后,文档只提到“在将来的适当时候”。它没有解释什么条件构成了“适当的时间”

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


你的问题分为两部分:

  • 什么时候
  • 多久一次
  • 让我们从#2开始,多久一次。我认为文件充分回答了这个问题。每当你的应用程序调用
    dataChanged()
    方法时,都有可能进行备份。因此,谨慎的做法是限制此方法的调用频率。如何处理这件事取决于你。一种方法,你可能想考虑它只是调用此应用程序中重要的/重要的数据更改。也就是说,不要在更改用户首选项时调用它(例如,背景色),而是在任何类型的事务数据时调用它


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

    我进一步研究了Android backup Manager服务,发现了以下几点:

  • 根据中的“请求备份部分” 如果连续多次调用dataChanged(),在备份管理器向您的代理请求备份之前,您的代理仍然只收到一次对onBackup()的调用
  • 我将此解释为应用程序中的每个DataChanged()调用都会通过传输通知Backup Manager服务。备份管理器服务将只执行一次对我们应用程序的备份代理的onBackup()的调用,即使在备份管理器服务响应之前多次调用DataChanged(请参阅下面关于备份管理器响应频率的第2项)

  • 根据该测试仪(我刚才还进行了备份频率测试): 备份管理器服务每小时响应一次(我在测试中也证明了这一点),只要在上次数据备份后的一小时内至少调用了一个DataChanged()

  • 你找到答案了吗?也许,一些日志记录可以帮助收集一些统计数据。@Andree:我也有同样的问题。你有答案了吗?为了我的案子。我为每个备份操作上载了大约1MB的数据(用户本地sqlite数据)。@Loc Ha:对不起,我没有。我将在这个问题上悬赏以引起更多的关注。对于一个广泛而困难的问题,这是一个很好的答案(因为文档没有说明,所以只有谷歌真正知道)。我同意你的观点。这种情况发生的频率取决于Android的版本,真的。在Android L之前,第一次备份将在设备安装后12小时左右进行;然后,备份将在任何名为dataChanged()的应用程序运行后约1小时内发生。在Android的后期版本中,事情变得更加轻松;从dataChanged()到备份实际运行的时间大约有4个小时。这适用于较旧的键/值API。Android M中新增的完整数据备份仅在设备空闲且连接到wifi时运行。