我在我的代码中遇到了
一个
我知道最可能的原因是 - 系统杀死并重新启动了服务,并且活动对其有旧引用。除此之外,在网上我没有找到太多信息。
我已经尝试过以下内容:
DeadObjectException
。下面我描述了我的设置以及我尝试解决该问题的方法。
一个
Service
S是从Application
A启动的。
Activity
B(来自另一个应用程序)使用Messenger
和IBinder
接口与该服务通信。这个活动也是从同一个服务开始的。在这个活动中,当我按下按钮时,我应该向服务发送一条消息。我经常在按钮按下时得到DeadObjectException
。我知道最可能的原因是 - 系统杀死并重新启动了服务,并且活动对其有旧引用。除此之外,在网上我没有找到太多信息。
我已经尝试过以下内容:
- 我在服务中使用了
startForeground()
,我可以看到服务在持续运行(通知区域中的通知)。我仍然收到异常。 - 在系统重启后,我一段时间内不会遇到此异常。
- 异常是间歇性的。我没有100%的复制。但是,在以下情况下,我总是会遇到异常:
- 启动应用程序A(也启动服务S)。
- 启动活动B,一切正常。
- 通过重新部署应用程序A重新启动服务。
- 导航到活动B。异常发生了。
- 此时,如果我重新启动活动B,则异常消失。
- 这使我得出结论,如果我确保每次服务启动时活动B都是新的,则此异常将消失。然后,我尝试向活动B发送一个杀死意图,然后再启动它。(活动有一个
BroadcastReceiver
,并在onReceive()
中调用finish()
)。问题是,如果活动暂停,Intent
不会传递给它。此外,我看到onDestroy()
被简要命中,因为Android管理活动生命周期,不能保证将意图传递给它。我还尝试扩展BaseActivity
,如此stackoverflow问题中所述。 - 我还尝试设置
FLAG_ACTIVITY_CLEAR_TASK
(除了通常的FLAG_ACTIVITY_NEW_TASK
),但没有更好的结果。