与 Activity 生命周期无关的广播接收器

Broadcast Receiver that isn't tied to Activity Lifecycle

我正在尝试实现一个应用程序,它使用广播接收器计算我的 phone 屏幕全天亮起的时间。

我在我的广播接收器中声明 Action_Screen_Off/Action_Screen_On 因为我不能在我的清单中声明它,而且我一直在讨论处理存储我的屏幕显示的时间量的最佳方法上。

因为我不能在清单中声明它,我是否应该在 activity 的 onCreate 中声明广播接收器?我担心的是,如果我的理解是正确的,那么我的接收器将被绑定到 activity 的生命周期,并且我只能在 [=26] 时存储 on/off 次=] 处于活动状态。

该应用程序的全部意义在于它在后台运行,然后在 activity 出现在前台时显示使用情况图。

这让我认为服务可能是处理广播接收器的最佳选择,但 Google 现在似乎建议我们不要使用后台服务,而只使用有界服务和前台服务。

我如何确保我的应用程序正在接收 on/off 意图,而不需要 activity 声明接收者在前台,并且接收者不依赖于 activity 的生命周期 activity?

您需要此功能的背景 Service。你的 Service 不需要实际做任何事情,但它需要一直处于活动状态,这样你就有东西可以锚定你的 BroadcastReceiver 了。在 ServiceonCreate() 中,创建 BroadcastReceiver 的实例并注册屏幕 on/off 事件。确保你 return START_STICKY 从你的 onStartCommand() 到你的 Service。这将确保 Service 始终处于活动状态,并且 Android 将重新启动 Service 如果它终止了您的进程(无论出于何种原因)。 BroadcastReceiver 可以将 on/off 事件的时间戳写入文件、SQLite 数据库或 SharedPreferences,然后您的 Activity 可以读取这些数据并显示图表或其他内容。