【问题标题】:background task questions背景任务问题
【发布时间】:2018-12-23 16:57:48
【问题描述】:
我最近一直在阅读有关如何在 Android 中完成后台作业(使用 Service、AlarmManager、JobScheduler 等)的信息,并了解到即使应用程序已经关闭或设备已屏蔽,这些后台任务也可以无限期地执行。我知道只有当他们停止自己或其他组件阻止他们时,他们才会停止。
问题:
如果我有后台作业或每隔 1 小时发出一次的警报。它真的会永远运行直到组件停止它们吗?有没有系统会阻止它们的实例?
如果我有周期性工作或每隔 1 小时发出一次警报怎么办。如果我卸载启动它们的应用程序,它们会停止吗?因为我从未在任何文档中阅读过这部分内容。
有没有办法检查我的设备中是否有任何正在运行或挂起的后台作业/警报?
【问题讨论】:
标签:
android
android-service
android-alarms
android-jobscheduler
android-background
【解决方案1】:
您问题中关于后台任务的解释仅适用于后台服务,仅适用于低于 26 的 Android API 级别。
Google 建议使用 JobScheduler 或 Foreground Service 在后台执行一些工作,即使应用程序不在前台。
向你提问
-
不,如果您使用 JobScheduler 或警报管理器,系统将根据您提到的设备空闲情况和条件触发您的工作来完成您的工作,但是当条件不再满足时,系统可以随时来停止您的工作.
如果您使用的是 JobScheduler,它会在系统想要强制停止时通知您,以便您可以正确处理它并在需要时重新安排
-
卸载应用程序后,所有已安排或正在进行的作业或警报都将被销毁。
-
是的,JobScheduler 确实提供了一个函数“getAllPendingJobs”
注意:
- 对于即使应用程序关闭也应安排或完成的工作,请尽量避免使用后台服务或警报管理器。
JobScheduler 是更好的替代品。
- 如果您想在应用处于前台时执行一些简单的后台工作,请尝试使用 HandlerThreads 或 AsyncTasks