gpt4 book ai didi

java - SecurityException 不会从服务转发到其管理器

转载 作者:行者123 更新时间:2023-12-01 21:57:43 25 4
gpt4 key购买 nike

我有一个具有外部 API 的服务。在某些情况下我必须抛出 SecurityException。奇怪的事情如下:在某些 API 中,当我抛出异常时,绑定(bind)器成功完成此事务并且该异常被服务的经理捕获。然而,在其他 API 中,异常不会到达管理器,因为 Binder 吞噬了它。Binder日志消息如下:“11 月 6 日 06:04:05.766 3632 W Binder Binder 调用失败。”从 Binder 代码可以看出,异常被吞掉了,因为事务是单向的:

           if ((flags & FLAG_ONEWAY) != 0) {
737 if (e instanceof RemoteException) {
738 Log.w(TAG, "Binder call failed.", e);
739 } else {
740 Log.w(TAG, "Caught a RuntimeException from the binder stub implementation.", e);
741 }
742 } else {
743 // Clear the parcel before writing the exception
744 reply.setDataSize(0);
745 reply.setDataPosition(0);
746 reply.writeException(e);
747 }

我需要转发异常。我不明白为什么在某些情况下会转发异常,而在其他情况下则不会。我没有看到这两种类型的 API 之间有任何差异。如果可能的话,我怎样才能使我的异常不是单一的?请帮忙。提前致谢。问候,斯维塔

最佳答案

我找到了问题的答案。出现该问题的原因是“有问题的”API 在 AIDL 中被定义为单向。所以它们是异步的。这就是为什么从这些 API 中发送异常是错误的,因为在单向 API 中,到应用程序进程(在管理器运行的上下文中)的链接丢失了。

关于java - SecurityException 不会从服务转发到其管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58730029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com