为什么AIDL的设计无法将异常发送回调用者

时间:2014-07-08 09:13:14

标签: android aidl

http://developer.android.com/guide/components/aidl.html

  

您抛出的异常不会被发送回调用者。

1 个答案:

答案 0 :(得分:3)

因为它使用linux / unix RPC调用(这就是为什么你可以使用AIDL访问其他进程),而RPC调用没有异常的想法 - 它们是在70年代为C编写的。制作它们会很复杂。如何在例外工作的例外是令人难以置信的讨厌。它基本上是longjmp调用。围绕一个进程切换来做...这是可行的,但它需要搞乱每个AIDL函数的返回类型,基本上返回一个无类型参数,带有一个标记,说明实际类型是什么,以及解析它的代码并重新抛出客户端。它不适用于通用异常,它只适用于在AIDL中定义的异常类,它抛出整个内置的异常层次结构。这将使NDK库无法使用AIDL,因为您几乎必须通过他们的反序列化库来使其工作。考虑到AIDL的极端罕见以及任何使用它的人可能知道如何在需要时返回错误值这一事实,奖励太少的工作太多了。