DeadObjectException尝试使用Context.sendOrderedBroadcast时

时间:2012-10-17 13:04:15

标签: android broadcastreceiver

我正在使用Context.sendOrderedBroadcast方法发送广播并检查是否有人在到达resultReceiver之前收到了广播。

以下是代码段:

context.sendOrderedBroadcast(intent, null, new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) { 
  // Do something if this broadcast was not handled by others.
}, null, Activity.RESULT_OK, null, null);

这通常没有问题但是我不时会收到以下错误并且我的BroadcastReceiver没有被调用:

  

W / ActivityManager(12067):发送广播结果失败   意图{act = ...}   W / ActivityManager(12067):android.os.DeadObjectException   W / ActivityManager(12067):at   android.os.BinderProxy.transact(原生方法)   W / ActivityManager(12067):at   android.content.IIntentReceiver $存根$ Proxy.performReceive(IIntentReceiver.java:121)   W / ActivityManager(12067):at   com.android.server.am.ActivityManagerService.performReceive(ActivityManagerService.java:12912)   W / ActivityManager(12067):at   com.android.server.am.ActivityManagerService.processNextBroadcast(ActivityManagerService.java:13133)W / ActivityManager(12067):at   com.android.server.am.ActivityManagerService.finishReceiver(ActivityManagerService.java:12766)   W / ActivityManager(12067):at   android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:287)   W / ActivityManager(12067):at   com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:1755)   W / ActivityManager(12067):at   android.os.Binder.execTransact(Binder.java:301)   W / ActivityManager(12067):at   dalvik.system.NativeStart.run(原生方法)

到目前为止,我只在Android版本2.1的摩托罗拉Defy手机上遇到过它,但也可能在其他人身上遇到过。

我在互联网上找不到任何引用,有谁知道为什么会这样? 谢谢!

1 个答案:

答案 0 :(得分:2)

如果调用sendOrderedBroadcast()的组件在广播回绕到BroadcastReceiver匿名子类的提供实例之前被销毁,我可以看到这种情况发生。