使用AIDL(Android)处理跨进程错误的推荐方法

时间:2013-03-24 21:20:18

标签: java android aidl android-binder

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

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

  

未捕获的远程异常! (各个流程尚不支持例外情况。)

在我的logcat中。

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

有更好的方法吗?

1 个答案:

答案 0 :(得分:5)

您的远程方法可以返回包含结果数据的Parcel,如果有错误则返回异常。请参阅Parcel#writeException方法。我相信这是Android异常在对另一个进程中的ContentProvider执行操作时的反馈。返回结果数据的方法有很多种,包括使用Bundle类。

您的经理类可以通过取消分析和返回数据或抛出未分类的异常来隐藏实现细节,以便用户永远不会与Parcel进行交互。

Here is a link to the source for Parcel#writeException