分离后关闭 ParcelFileDescriptor 文件描述符

Closing a ParcelFileDescriptor file descriptor after detaching

在 Android 中,我使用方法 detachFd from the ParceFileDescriptor 获取一个 文件描述符 ,我将其传递给本机代码以供使用。由于 文件描述符 已分离,我使用 fdclose.

在本机代码中关闭它

既然是detach,我还要close the ParcelFileDescriptorjava实例吗?

在我看来我不应该这样做,但我发现在 Android 的旧版本(例如 Lollipop)中,StrictMode 抱怨资源未关闭,可能是因为不知道它已被分离.

如果需要 关闭 ParcelFileDescriptor 即使文件描述符已分离,是否有任何需要注意的副作用如果在本机代码中仍在使用分离的代码时关闭了?

标准做法是这样的:

try (ParcelFileDescriptor pFd = ParcelFileDescriptor.open(new File(path), ParcelFileDescriptor.MODE_READ_WRITE)) {
    int fd = pFd.detachFd();
} catch (IOException e) {
}

因为“ParcelFileDescriptor”和“fd”已经分离,关闭对象不会影响“fd”。

// native

close(fd)