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

时间:2018-01-01 02:37:13

标签: android android-intent broadcastreceiver android-service

我正在尝试使用广播接收器实现一个应用程序,该应用程序使用广播接收器整天打开手机屏幕的时间。

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

由于我无法在清单中声明它,我应该在我的活动中声明onCreate中的广播接收器吗?我担心的是,如果我的理解是正确的,那么我的接收器将被绑定到活动的生命周期,并且只有在活动处于活动状态时我才能存储开/关时间。

应用程序的重点在于它在后台运行,然后在活动处于前台时显示使用情况的图表。

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

如何确保我的应用程序正在接收打开/关闭意图,而没有声明接收方位于前台的活动,接收方不依赖于该活动的生命周期?

1 个答案:

答案 0 :(得分:1)

此功能需要后台Service。您的Service不需要实际执行任何操作,但它必须始终处于活动状态,以便您可以将BroadcastReceiver锚定到其中。在onCreate()的{​​{1}}中,创建Service的实例并注册屏幕开/关事件。确保从BroadcastReceiver中的START_STICKY返回onStartCommand()。这将确保Service始终处于活动状态,并且如果Android终止您的流程(无论出于何种原因),Android将重新启动ServiceService可以将开/关事件的时间戳写入文件,SQLite数据库或BroadcastReceiver,然后您的SharedPreferences可以读取此数据并显示图表或其他任何内容。