android - 即使应用程序关闭,BroadcastReceiver 也能正常工作
问题描述
我有一个关于广播接收器的问题。我有一个应用程序需要不断接收 ACTION_TIME_TICK 意图来刷新时钟小部件。我实现了一个前台服务,其中包含一个侦听该操作的 BroadcastReceiver。但是在 android oreo 上,启动服务的唯一方法是将其作为前台服务启动,这意味着向用户显示持久通知,通知应用程序正在后台运行。我不想向用户显示该通知。我试图在 Application 类中实现 BroadcastReceiver。但这不能正常工作。有时广播接收器不工作,有时工作得很好。即使它运行良好,如果应用程序从最近的任务中删除,BroadcastReceiver 也会停止工作。
解决方案
有没有办法在不使用服务的情况下使用无限期工作的广播接收器?
在以下情况下ACTION_TIME_TICK
:不,因为您不能使用清单声明的 BroadcastReceiver。
由于您不愿意使用前台服务,您可能需要查看START_STICKY
. 在这种情况下,这是最大化服务运行时间的唯一方法:允许系统在因资源不足而停止后反复启动它。当然,这意味着您的时钟可能会在任意长的时间内停止更新。
请注意,您的问题不仅限于 Oreo(Oreo 不要求您成为前台服务,但如果您不在前台,它确实对您允许执行的操作施加了某些限制)。即使在早期的操作系统上,如果你不是前台,系统也会认为你是淘汰的主要候选人。
推荐阅读
- log4j - 更新 log4j 到 2.x 时,如何处理改变的 Level 整数?
- javascript - 如何为带有冒号“:”Angular 9的自定义事件添加事件绑定?
- database - 如何从数据库列表而不是列表列表中获取?
- azure-cdn - 如何修复 Azure CDN 返回的 ERR_HTTP2_PROTOCOL_ERROR?
- android - 如何使用 Delphi for Android 创建带圆角的 TEdit?
- python - Pythonic 方式的 try/except 对象变量设置
- sql - 在 JSON 解析后从 Google 脚本中的 sql 查询输出中检索记录/值
- c# - BottomNavigationBar 上方的按钮
- javascript - VB.NET 正在创建新的 cookie,而不是更新现有的
- python - 在python中将整数转换为日期