4

我有一个活页夹服务和一个住在不同进程中的客户端。使用 AIDL,当客户端调用我的远程 binder 服务时,有时我需要将错误(异常)转发回客户端。

但是,据我了解,这是不可能的。我尝试从我的活页夹服务中抛出一个“RemoteException”,看看会发生什么,我得到了

未捕获的远程异常!(跨进程尚不支持异常。)

在我的日志中。

既然看起来这是不可能的,那么通知客户错误的最佳方法是什么?我在想我可以将我的 AIDL 转换为使用 C 风格的接口,在其中我只返回一个错误代码(成功时返回 0),但这看起来很难看。

有更好的方法吗?

4

1 回答 1

7

如果出现错误,您的远程方法可以返回Parcel包含结果数据或异常的 a。见Parcel#writeException方法。我相信这就是ContentProvider在另一个进程中执行操作时 Android 异常如何恢复。有很多方法可以返回结果数据,包括使用Bundle类。

您的管理器类可以通过解包并返回数据或抛出解包异常来隐藏实现细节,这样用户就不会与Parcel.

这是一个链接到源代码Parcel#writeException

于 2013-03-24T22:49:16.487 回答