今天接到了个需求,需要用到跨进程抛异常。也就是说在Service端抛出的异常需要可以在Client端接收。印象中binder是可以传异常的,所以aidl直接走起:但是这个程序实际上运行起来是这样的:. 但是我明明记得AIDL生成的代码里面就有向Parcel写入异常啊:查找Parcel的源码,其实是有writeException方法的:可以看到其实Parcel是支持写入异常的,但是只支持Parcelable的异常或者下面这几种异常:. 如果是普通的RuntimeException,这打断写入,继续抛出。而0代表的是没有发生异常。好,到了这里其实整个流程就差不多了,但是我发现我没有看到那个”Exceptions are not yet supported across processes.”字符串,这个不支持的提示又是哪里来的呢?形成了一个Uncaught remote exception。

Android跨进程抛异常的原理的实现

Android跨进程抛异常的原理的实现

Android跨进程抛异常的原理的实现

Android跨进程抛异常的原理的实现

Android跨进程抛异常的原理的实现

Android跨进程抛异常的原理的实现

Android跨进程抛异常的原理的实现

Android跨进程抛异常的原理的实现

Android跨进程抛异常的原理的实现

Android跨进程抛异常的原理的实现