我有一个用例,当一个事务完成或失败时,我必须在后台等待5分钟(而不是冻结ui),然后在没有用户干预的情况下调用一段代码。所以我需要实现后台服务。
我想知道哪个更适合我的场景。
工作管理员(Jetpack)
JobScheduler(用于API 14-21,FireBase JobDispatcher)
维护服务
在oreo及以上版本中,如果我运行后台服务,它是否会在通知中显示应用程序正在后台运行?

最佳答案

现在推荐的后台处理方法是jetpack workmanager api。我将引用官方文件,理由如下:
WorkManager根据设备API级别和应用程序状态等因素选择适当的方式运行任务。如果WorkManager在应用程序运行时执行其中一个任务,则WorkManager可以在应用程序进程中的新线程中运行任务。如果应用程序未运行,WorkManager将选择适当的方式来计划后台任务--根据设备API级别和包含的依赖项,WorkManager可能会使用JobScheduler、FireBase JobDispatcher或AlarmManager。您不需要编写设备逻辑来确定设备具有哪些功能并选择适当的api;相反,您可以将任务交给workmanager,让它选择最佳选项。
此外,WorkManager还提供了一些高级功能。例如,您可以设置任务链;当一个任务完成时,WorkManager会将链中的下一个任务排队。您还可以通过观察任务的livedata来检查任务的状态及其返回值;如果您希望显示指示任务状态的ui,这将非常有用。
因此,您不必每次都担心要选择哪个后台处理(因为每个任务都有推荐和适当的方法),只需使用workmanager,它就能完成任务。
这是在考虑以下问题:
WorkMeor旨在保证系统即使在应用程序退出时也会运行这些任务,例如将应用程序数据上传到服务器。它不适用于进程内后台工作,如果应用程序进程消失,则可以安全地终止这些工作;对于这种情况,我们建议使用线程池。
另外,由于WorkManager API正在使用JobScheduler、Firebase JobDistPacher或AlarmManager,因此必须考虑所用功能的最低API级别。JobScheduler至少需要API 21,Firebase JobDispatcher至少需要API 14和Google Play服务。
完整文档检查:https://developer.android.com/topic/libraries/architecture/workmanager
对于你的第二个问题:据我所知,你总是会看到那个通知,因为它通知用户你的应用正在消耗电池。用户可以通过android oreo 8.1中的设置禁用通知。

10-08 15:55
查看更多