【问题标题】:Is it possible that BroadcastReceiver in a background activity receive broadcast?后台活动中的 BroadcastReceiver 是否有可能接收广播?
【发布时间】:2012-02-17 14:45:06
【问题描述】:

BroadcastReceiver 是否有可能在一个已经进入后台接收广播的活动中?如果没有,我该怎么办?

编辑:

让我澄清一下我真正需要什么。 我有一项将从蓝牙接收数据的服务。 当它成功从蓝牙设备获取数据时,服务将广播。

活动分三种情况。

  1. 前景

弹出一个对话框并询问用户一些东西 我认为可以通过在活动中注册接收者来简单地完成

  1. 背景

我只是不知道这部分该怎么做。 如果我在应用程序中注册接收器,则会显示通知。看了下面的答案后,我想我可以在应用程序中注册了。

  1. 睡觉 唤醒设备。

谢谢。

【问题讨论】:

    标签: android broadcastreceiver


    【解决方案1】:

    你可能甚至不想要那个。活动不适合以这种方式使用。

    您应该使用服务来处理它。或者如果它需要一个 UI,就启动一个 Activity。

    在我看来有两种选择。

    1. 让服务运行并在那里注册接收器。
    2. 如果可能,您可以改为在清单中注册广播接收器并在那里处理它。 请记住,接收器将在主线程上运行,因此您应该向正在运行的服务发出信号或在此处启动服务或活动。可能是执行单个任务的服务。

    使用IntentService 可以轻松实现执行单个任务的服务。它有点像包装在服务中的异步任务。

    【讨论】:

    • 作为对第二点的补充,我想补充一点,该服务也将在主线程上运行,除非您在那里处理线程或使用 IntentService 免费获得它
    【解决方案2】:

    BroadcastReceiver 是否有可能在一个已经进入后台接收广播的活动中?如果没有,我该怎么办?

    您可能会在致电registerReceiver 之后和致电unregisterReceiver 之前随时收到通知。如果您在“后台”中收到广播,这可能意味着您没有将注册和取消注册调用绑定到 Activity 生命周期中的适当方法。

    【讨论】:

      【解决方案3】:

      如果你在 Activity 的上下文中注册广播接收器,只要 Activity 还活着,它就会接收广播。

      但是,您可以使用 appplicatino 上下文注册接收器,即使活动不活跃,它仍然会接收广播。

      【讨论】:

      • 但这会使应用程序变得混乱,因为它应该是 Activity 或某些单独的处理程序私有的问题。活动必须存在这一事实也是一个很大的“如果”。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多