首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理DeadObjectException的杀戮服务?

如何处理DeadObjectException的杀戮服务?
EN

Stack Overflow用户
提问于 2011-11-06 03:59:51
回答 1查看 1.8K关注 0票数 7

我的代码中有DeadObjectException。下面,我描述了我的设置,以及我试图解决这个问题的方法。

Service S是从Application A开始的。

Activity B (来自另一个应用程序)使用MessengerIBinder接口与该服务进行通信。此活动也是从同一服务开始的。在此活动中按下按钮,我将向服务发送一条消息。我经常在按钮上按DeadObjectException

我知道,造成这种情况的最可能原因是--系统中断并重新启动服务,并且该活动有旧的引用。除此之外,我还没有在网上找到多少信息。

这就是我尝试过的:

  • 在服务中使用了startForeground(),我可以看到服务一直在运行(通知区域中的通知)。我仍然得到了exception.
  • On一个系统的重新启动,我暂时没有得到这个异常。
  • 异常是间歇的。我没有百分之百的复制。然而,在下面的场景中,我总是得到一个例外: fine.
  • Restart
  • start app A (thi还启动服务S)。
  • 启动活动B,一切都通过重新部署应用程序A.
  • 导航到活动B,从而使服务工作正常。

  • 由此得出结论,如果我确保每次服务启动时活动B都是新鲜的,那么这个异常就会消失。然后,在开始之前,我试图向活动B传递一个谋杀意图。(活动有一个BroadcastReceiver,并在onReceive()中调用finish() )。问题是,如果活动暂停,Intent就不会被传递给它。另外,我看到onDestroy()被击中了,因为Android管理着活动生命周期,所以意图并不一定会被交付给它。我还尝试了扩展this stackoverflow question.
  • I中提到的BaseActivity,也尝试了设置FLAG_ACTIVITY_CLEAR_TASK (除了通常的FLAG_ACTIVITY_NEW_TASK之外),没有更好的结果。

现在,我觉得我已经没有选择了。有没有人遇到过类似的问题?有什么我可以试试的吗?是否有可能捕获异常,然后重新绑定服务?

EN

回答 1

Stack Overflow用户

发布于 2014-03-18 03:01:11

在活动B中,实现一个IBinder.DeathRecipient接口(可能包装在一个自定义类中),并通过IBinder从您的服务通过IBinder.linkToDeath()注册它。当/如果Service因某种原因而死时,您的回调就会被触发,而活动B可以优雅地清理任何内部簿记,保存它并重新绑定到该服务。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8025150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档