【问题标题】:How to ensure any of application's Activities which is currently in foreground to receive a message如何确保当前在前台的任何应用程序活动接收消息
【发布时间】:2015-12-18 09:25:49
【问题描述】:

我希望当前处于前台的任何应用程序的Activities 接收消息。

所以我发送LocalBroadcastManager 来在我的应用程序中分发消息。然后我的想法是拥有BaseActivity,所有其他Activities 必须扩展。在 onResume 中的 BaseActivity 中,接收者已为消息注册 (registerReceiver),而在 onPause 中未注册 (unregisterReceiver)。

这将始终有效,但当消息仅在 Activities 之间发生转换且前一个 Activity 在其 onPause 之后和下一个 Activity 在其 onResume 之前.

所以我想使用sendStickyBroadcast,这样消息会等到一些Activity 没有取出,但我明白了

此方法在 API 级别 21 中已弃用。

那么如何确保当前在前台的任何应用程序的活动都能接收到消息。

【问题讨论】:

  • 什么组件(以及何时)发送本地广播?
  • 为什么重要?让我们假设它是一些后台作业,并且发送的频率不高,几分钟一次。
  • 例如如果它是一个服务然后绑定到它

标签: android android-activity android-lifecycle localbroadcastmanager sticky-broadcast


【解决方案1】:

此方法在 API 级别 21 中已弃用。

不过,你可以使用 if 一段时间。弃用不会自动使功能无法使用。

那么如何确保当前在前台的任何应用程序的活动都能接收到消息。

您可以切换到像GreenRobot's EventBus 这样的事件总线库,并且活动状态/生命周期完全不相关

【讨论】:

  • “不过,您可以暂时使用 if。弃用不会自动使功能无法使用。”好的,但弃用是一个很大的警告信号。此外,它并没有无缘无故地被弃用,特别是当文档中的评论说“它们不提供安全性(任何人都可以访问它们)、没有保护(任何人都可以修改它们)以及许多其他问题”。但是,是的,某种事件总线可以解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-11
相关资源
最近更新 更多