外观
在 AIDL 调用中,如何处理客户端和服务端的异常断开?
标准回答
调用时处理 RemoteException/DeadObjectException;通过 ServiceConnection 观察服务连接状态,必要时使用 IBinder.linkToDeath 注册死亡通知。断连后清空旧代理、终止或标记未完成请求,受控重连并重新注册回调;用会话标识拒绝旧连接的迟到结果。
通俗例子
播放服务被回收后,Binder 调用可能抛 RemoteException;根据需要注册死亡通知、清理旧代理,再按策略重新连接和恢复状态。
深入解释
**断开意味着什么:**服务端进程死亡后,原先的远端 Binder 引用不能继续当作有效连接使用。客户端需要根据死亡通知、连接回调或调用异常更新连接状态。
**恢复怎样避免重复:**重新取得接口并恢复订阅;未完成请求先确认是否已执行,再决定重试。不能一收到断开通知就把所有写操作无条件重发。
易混淆点
失败不一定表示服务端完全没执行,不能无条件重试有副作用的操作。
参考资料
内容来源
- Android · AI Agent 知识手册 · 原条目
7.2.3