我的代码中有DeadObjectException。下面,我描述了我的设置,以及我试图解决这个问题的方法。
Service S是从Application A开始的。
Activity B (来自另一个应用程序)使用Messenger和IBinder接口与该服务进行通信。此活动也是从同一服务开始的。在此活动中按下按钮,我将向服务发送一条消息。我经常在按钮上按DeadObjectException。
我知道,造成这种情况的最可能原因是--系统中断并重新启动服务,并且该活动有旧的引用。除此之外,我还没有在网上找到多少信息。
这就是我尝试过的:
startForeground(),我可以看到服务一直在运行(通知区域中的通知)。我仍然得到了exception.
BroadcastReceiver,并在onReceive()中调用finish() )。问题是,如果活动暂停,Intent就不会被传递给它。另外,我看到onDestroy()被击中了,因为Android管理着活动生命周期,所以意图并不一定会被交付给它。我还尝试了扩展this stackoverflow question.BaseActivity,也尝试了设置FLAG_ACTIVITY_CLEAR_TASK (除了通常的FLAG_ACTIVITY_NEW_TASK之外),没有更好的结果。现在,我觉得我已经没有选择了。有没有人遇到过类似的问题?有什么我可以试试的吗?是否有可能捕获异常,然后重新绑定服务?
发布于 2014-03-18 03:01:11
在活动B中,实现一个IBinder.DeathRecipient接口(可能包装在一个自定义类中),并通过IBinder从您的服务通过IBinder.linkToDeath()注册它。当/如果Service因某种原因而死时,您的回调就会被触发,而活动B可以优雅地清理任何内部簿记,保存它并重新绑定到该服务。
https://stackoverflow.com/questions/8025150
复制相似问题