没有办法让 Work 在重启后保持不变?
No way to make Work persistent across reboots?
所以我知道 WorkManager
在受支持的 API 上使用 JobScheduler
,但似乎没有任何方法可以使 WorkManager
在重新启动后持续工作?是请求 BOOT_COMPLETED
权限和重新安排作业的唯一选项吗?
WorkManager 实际上用于保留可延迟的任务,即使在您的应用程序退出和设备重启后也是如此,please refer to the docs。它在 api 23 及更高版本上使用 JobScheduler,在 api 14 到 22 上使用 broadcastReceiver 和 AlarmManger。您可以使用约束来检查电池状态、网络覆盖范围等,具体取决于您的特定用例。您只需要注意不要在将现有 类 添加到队列后删除或重命名它们,因为 WorkManager 使用它的内部数据库来存储这些 类 如果您删除它们或重命名,您的应用程序将崩溃他们。
回答您的问题:如果设备已重启,您无需执行任何操作。 WorkManager 会持续安排您的工作,而无需您提出任何额外要求。
WorkManager 在其内部 Room 数据库中保存工作请求。这允许它保证在设备重新启动时执行工作。
团队去年写的documentation covers this as this blog "Introducing WorkManager"
所以我知道 WorkManager
在受支持的 API 上使用 JobScheduler
,但似乎没有任何方法可以使 WorkManager
在重新启动后持续工作?是请求 BOOT_COMPLETED
权限和重新安排作业的唯一选项吗?
WorkManager 实际上用于保留可延迟的任务,即使在您的应用程序退出和设备重启后也是如此,please refer to the docs。它在 api 23 及更高版本上使用 JobScheduler,在 api 14 到 22 上使用 broadcastReceiver 和 AlarmManger。您可以使用约束来检查电池状态、网络覆盖范围等,具体取决于您的特定用例。您只需要注意不要在将现有 类 添加到队列后删除或重命名它们,因为 WorkManager 使用它的内部数据库来存储这些 类 如果您删除它们或重命名,您的应用程序将崩溃他们。
回答您的问题:如果设备已重启,您无需执行任何操作。 WorkManager 会持续安排您的工作,而无需您提出任何额外要求。
WorkManager 在其内部 Room 数据库中保存工作请求。这允许它保证在设备重新启动时执行工作。
团队去年写的documentation covers this as this blog "Introducing WorkManager"