【发布时间】:2013-03-14 07:19:07
【问题描述】:
我有一个活页夹服务和一个存在于不同进程中的客户端。使用 AIDL,当客户端调用我的远程 binder 服务时,有时我需要将错误(异常)转发回客户端。
但是,据我了解,这是不可能的。我尝试从我的活页夹服务中抛出一个“RemoteException”,看看会发生什么,我得到了
未捕获的远程异常! (尚不支持跨进程的异常。)
在我的日志中。
既然这看起来不可能,那么通知客户错误的最佳方法是什么?我在想我可以将我的 AIDL 转换为使用 C 风格的接口,在其中我只返回一个错误代码(成功时返回 0),但这看起来很难看。
有更好的方法吗?
【问题讨论】:
-
“我有一个活页夹服务和一个存在于不同进程中的客户端”——为什么?
-
我为 AOSP(Android 开源项目)创建了一个系统服务,就像 PackageManager 一样,它一直在后台运行。我为我的客户创建了一个 AIDL 接口来与我的服务进行交互。
-
好的,这很合理。您是否查看过其他系统服务如何处理它?我知道引发的一些异常实际上是由我们在 SDK 中视为系统服务的手动 Java 类引起的(例如,
AccountManager)。但是我不得不认为系统进程中可能会出现一些异常情况,因此在某处必须有一个现有的模式。
标签: java android aidl android-binder