SyncAdapter 连续数小时保持清醒

SyncAdapter stays awake for hours on end

我的 Android 应用程序使用 SyncAdapter 与我的 API 服务同步。我使用 delayUntil 告诉它每半小时只同步一次。但是,一些用户报告说一旦完成就再也不会休眠,耗尽 phone 电池(例如,该应用程序出现在设备的电池页面上,显示 "Keep awake" 超过 13 小时)。

我也确定 onPerformSync 方法中没有无限循环 - 它会进行一些 HTTP 调用并更新数据库,仅此而已。

有没有其他人经历过这样的事情,如果有,背后的原因是什么?

查看您的应用程序 onCreate 方法。我犯的错误是假设应用程序仅在用户与您的应用程序交互时才启动,但实际上每次 SyncAdapter 执行其操作时应用程序都会启动。在我的例子中,应用程序的 onCreate 方法告诉 Dropbox 开始同步,而旨在使 Dropbox 停止同步的代码从未启动(它发生在最后一个 Activity 被关闭时 - 这当然从未发生过因为当只有 SyncAdapter 运行) 时 没有活动,所以它再也不会休眠。