首页 > 解决方案 > 即使应用程序关闭,BroadcastReceiver 也能正常工作

问题描述

我有一个关于广播接收器的问题。我有一个应用程序需要不断接收 ACTION_TIME_TICK 意图来刷新时钟小部件。我实现了一个前台服务,其中包含一个侦听该操作的 BroadcastReceiver。但是在 android oreo 上,启动服务的唯一方法是将其作为前台服务启动,这意味着向用户显示持久通知,通知应用程序正在后台运行。我不想向用户显示该通知。我试图在 Application 类中实现 BroadcastReceiver。但这不能正常工作。有时广播接收器不工作,有时工作得很好。即使它运行良好,如果应用程序从最近的任务中删除,BroadcastReceiver 也会停止工作。

标签: androidandroid-broadcastreceiverandroid-8.1-oreo

解决方案


有没有办法在不使用服务的情况下使用无限期工作的广播接收器?

在以下情况下ACTION_TIME_TICK:不,因为您不能使用清单声明的 BroadcastReceiver。

由于您不愿意使用前台服务,您可能需要查看START_STICKY. 在这种情况下,这是最大化服务运行时间的唯一方法:允许系统在因资源不足而停止后反复启动它。当然,这意味着您的时钟可能会在任意长的时间内停止更新。

请注意,您的问题不仅限于 Oreo(Oreo 不要求您成为前台服务,但如果您不在前台,它确实对您允许执行的操作施加了某些限制)。即使在早期的操作系统上,如果你不是前台,系统也会认为你是淘汰的主要候选人。


推荐阅读