gre*_*man 0 service android broadcastreceiver
在我之前的问题中:如何在BroadcastReceiver中保留和访问数据?我有很好的答案,但在这里我专注于此.
有BroadcastReceiver,有服务.我想从接收器发送一些数据到服务并获取数据.发起转移的一方是接收方,而不是服务方.
为了简单起见,假设接收者等待SCREEN_ON然后询问服务"这是用户的生日",服务器返回true或false.
如果我没有弄错的话,我应该将我的数据附加到Service的Intent,然后调用startService,但是如何获取数据?
你不能按照你所描述的方式真正做到这一点.@CommonsWare是正确的,您选择的架构是有缺陷的.
BroadcastReceivers是短命的.因此,他们无法进行任何异步调用,也无法执行任何需要"大量时间"的任务.您BroadcastReceiver会被某个事件触发,如果由于该事件需要做大量的工作,您需要将该工作委托给a Service.
通常(例如:在一个内Activity),如果你想要从你那里请求信息,Service你可以绑定Service到服务器并对服务进行同步调用以请求你想要的数据,或者你可以异步调用服务(即:发送一个Intent到it)然后监听返回的结果(使用a BroadcastReceiver).这些方法都不适用于a,BroadcastReceiver因为a BroadcastReceiver无法绑定到a Service并且无法进行异步调用.
编辑:从Android文档中复制相关信息,以供参考
接收器生命周期
一个
BroadcastReceiver对象仅适用于呼叫的持续时间onReceive(Context, Intent).一旦您的代码从此函数返回,系统将认为该对象已完成且不再处于活动状态.这会对您在
onReceive(Context, Intent)实现中可以执行的操作产生重要影响 :任何需要异步操作的东西都不可用,因为您需要从函数返回来处理异步操作,但此时BroadcastReceiver它不再处于活动状态,因此系统不再在异步操作完成之前可以自由地终止它的进程.特别是,您可能无法显示对话框或绑定到服务中的服务
BroadcastReceiver.对于前者,您应该使用NotificationManagerAPI.对于后者,您可以使用Context.startService()向服务发送命令.
| 归档时间: |
|
| 查看次数: |
3395 次 |
| 最近记录: |