Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用AIDL(Android)跨流程处理错误的推荐方法_Java_Android_Aidl_Android Binder - Fatal编程技术网

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

Java 使用AIDL(Android)跨流程处理错误的推荐方法,java,android,aidl,android-binder,Java,Android,Aidl,Android Binder,我有一个活页夹服务和一个处于不同流程中的客户机。使用AIDL,当客户端调用我的远程绑定器服务时,有时我需要将错误(异常)中继回客户端 然而,据我了解,这是不可能的。我试着从我的活页夹服务中抛出一个“RemoteException”,看看会发生什么,我得到了一个答案 未捕获的远程异常!(尚未跨流程支持异常。) 在我的日志里 既然看起来这是不可能的,那么通知客户错误的最佳方法是什么?我想我可以把我的AIDL转换成C风格的接口,在这个接口中我只返回一个错误代码(成功时返回0),但这看起来很难看 有更好

我有一个活页夹服务和一个处于不同流程中的客户机。使用AIDL,当客户端调用我的远程绑定器服务时,有时我需要将错误(异常)中继回客户端

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

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

在我的日志里

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


有更好的方法吗?

如果出现错误,远程方法可以返回包含结果数据或异常的。参见方法。我相信这就是安卓异常在另一个进程中的
ContentProvider
上执行操作时返回的方式。返回结果数据的方法有很多,包括使用
Bundle

您的manager类可以通过解单元并返回数据或引发解单元异常来隐藏实现细节,这样用户就不会与
包进行交互


.

“我有一个活页夹服务和一个位于不同进程中的客户端”--为什么?我为AOSP(Android开源项目)创建了一个系统服务,很像PackageManager,它一直在后台运行。我已经为我的客户创建了一个AIDL接口来与我的服务交互。好的,这是合理的。您看过其他系统服务如何处理它吗?我知道引发的一些异常实际上是由手工滚动的Java类引起的,我们在SDK中将其视为系统服务(例如,
AccountManager
)。但我不得不认为,在系统过程中可能会出现一些特殊情况,因此在某个地方一定存在这种情况的现有模式。感谢您的回复。我喜欢这个想法,但不幸的是,它不支持自定义异常。我在想,我可能会改变我所有的AIDL,以返回一个包裹。捆绑包将包括一个状态代码+要返回的对象(如果有的话)。如果您查看平台源代码中如何实现Parcel#writeException,它实际上非常简单(我在答案中添加了一个链接)。他们在表示异常类型的包中写入一个int,如果没有发生异常,则写入0,然后读取另一侧的int并抛出该异常。如果您遵循他们的模式,您可以抛出任何您喜欢的自定义异常。