Skip to content
阅读进度

在 AIDL 调用中,如何处理客户端和服务端的异常断开? ​

返回 Framework 与系统服务 目录

标准回答 ​

调用时处理 RemoteException/DeadObjectException;通过 ServiceConnection 观察服务连接状态,必要时使用 IBinder.linkToDeath 注册死亡通知。断连后清空旧代理、终止或标记未完成请求,受控重连并重新注册回调;用会话标识拒绝旧连接的迟到结果。

通俗例子 ​

播放服务被回收后,Binder 调用可能抛 RemoteException;根据需要注册死亡通知、清理旧代理,再按策略重新连接和恢复状态。

深入解释 ​

**断开意味着什么:**服务端进程死亡后,原先的远端 Binder 引用不能继续当作有效连接使用。客户端需要根据死亡通知、连接回调或调用异常更新连接状态。

**恢复怎样避免重复:**重新取得接口并恢复订阅;未完成请求先确认是否已执行,再决定重试。不能一收到断开通知就把所有写操作无条件重发。

易混淆点 ​

失败不一定表示服务端完全没执行,不能无条件重试有副作用的操作。

参考资料 ​

内容来源 ​

用完整回答理解机制,用真实证据解释项目。