代码之家  ›  专栏  ›  技术社区  ›  Rafa

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

  •  0
  • Rafa  · 技术社区  · 7 年前

    我正在尝试使用广播接收器实现一个应用程序,它可以计算我的手机屏幕在一天中的显示时间。

    我宣布 Action_Screen_Off/Action_Screen_On 在我的广播接收器中,因为我不能在我的清单中声明它,我一直在讨论存储屏幕显示时间的最佳方式。

    既然我不能在清单中声明它,那么我应该在我的活动中声明onCreate中的广播接收器吗?我担心的是,如果我的理解是正确的,那么我的接收器将与活动的生命周期联系在一起,我只能在活动处于活动状态时存储开/关时间。

    该应用程序的全部要点是,它在后台工作,然后在前台显示活动的使用图。

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

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   David Wasser    7 年前

    你需要背景 Service 对于此功能。你的 服务 实际上不需要做任何事情,但它需要一直保持活跃,这样你就有了一些东西来锚定你的 BroadcastReceiver 到在里面 onCreate() 您的 服务 ,创建 广播接收机 并注册屏幕开/关事件。一定要回来 START_STICKY 从您的 onStartCommand() 在您的 服务 . 这将确保 服务 始终处于活动状态,Android将重新启动 服务 如果它扼杀了您的进程(无论出于何种原因)。这个 广播接收机 只需将开/关事件的时间戳写入文件、SQLite数据库或 SharedPreferences 还有你的 Activity 然后可以读取这些数据并显示图表或其他内容。