【问题标题】:Driving a service API from a BroadcastReceiver从 BroadcastReceiver 驱动服务 API
【发布时间】:2011-02-10 00:12:54
【问题描述】:

我在驱动定制 API 之前尝试从接收器的 onReceive() 绑定到本地服务时收到错误消息。

“IntentReceiver 组件不允许绑定服务”

在广播接收器中从服务获取数据的最佳方式是什么。

非常感谢。

附:我需要同步获得答案,即我已经等待服务的答案,因此可能无法回调。

【问题讨论】:

    标签: android


    【解决方案1】:

    在广播接收器中从服务获取数据的最佳方式是什么。

    如果BroadcastReceiver 是从其他东西(例如,活动)创建并使用registerReceiver() 设置的,那么“其他东西”应该绑定到服务并完成工作。

    如果BroadcastReceiver 是在清单中注册的组件,那么您需要重新考虑解决您要解决的任何问题的方法。这类BroadcastReceivers 不能绑定到服务,也不能花太多时间做工作。如果BroadcastReceiver 不能在不到 10 毫秒的时间内完成工作,它应该通过startService() 将控制权委托给服务。然后该服务可以在后台线程上完成工作。

    附:我需要同步获得答案,即我等待服务的答案

    见上文。

    【讨论】:

    • 您好,是后者。疯狂的是,我只是将服务作为一种工具来实现,用于长时间监听信号强度并设置我希望通过(绑定)API 访问的成员数据变量。我在应用程序中没有活动,所以没有其他东西可以让听众停下来。
    • BroadcastReceiver 基本上是整个应用程序——它嗅探来电状态变化并拦截去电请求。就在这些传出请求离开电话之前,我想检查“内联”信号强度。为此,我们已经确定我需要一个服务来保存我需要记住最后一个信号强度值的监听器的生命周期。当我执行 onReceive() 中的代码以进行拨出呼叫时,我需要该值可供我使用。希望这是有道理的。
    • @SCG:您将被静态数据成员卡住,然后,从服务更新,由BroadcastReceiver 读取。在任何普通的应用程序中,都应该像瘟疫一样避免这种情况。
    • 这也是我的结论,虽然丑陋,但它确实有效。谢谢。
    • @CommonsWare 我们自己处理广播接收器。您能否详细说明您提出的解决方案? 就算丑
    猜你喜欢
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 2013-04-07
    • 1970-01-01
    相关资源
    最近更新 更多