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

标签 java android exception

我有一个具有外部 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/

相关文章:

c++ - 当抛出异常的代码链接到使用 -fno-exceptions 编译的库时会发生什么?

java - 如果源目标相同,Java 中的 fileoutputstream 生成零字节?

java - Kotlin - 从 Java 转换时出现 IndexOutOfBoundsException

无论如何,Android 构建工具只会构建 x86_64。 APK 通过 adb 安装运行,但在 Play 商店中显示不兼容

android - 从主要 Activity (按钮)启动 map View

java - 如何忽略 Java 中的异常

C++,捕获错误作为引用时的段错误

Java 位操作 - (num >>= 1) 做什么?

java - 使用 USCavalry 转换器将 Velocity 模板转换为 FreeMarker

java - 如何将 Joda LocalDate 转换为 java.util.Date?