我正在编写一个 Android 应用程序,它在 WebView 中使用 Javascript 来实现大部分 UI。我向 JS 公开了一个简单的接口(interface)来创建临时文件。在 Java 中,我提供了一个创建临时文件的函数,该函数返回一个文件 ID,以及一组在给定 ID 的情况下对临时文件进行操作的函数。在 JS 中,我使用 TempFile 对象包装这些函数,该对象在内部跟踪其自己的 ID。
问题是 Java 端有一个文件列表,但对 Javascript 中表示它们的对象一无所知。因此,当在 JS 中收集 TempFile 时,文件对象仍然存在于 Java 端。是否有一个“oncollect”或这样的回调,我可以用它来告诉 Java 释放与已收集的 TempFile 相对应的文件?
最佳答案
查看Finalizer
自ES12起,您可以找到FinalizationRegistry
。使用它告诉 Java 释放与已收集的 TempFile 相对应的文件。
const registry = new FinalizationRegistry((fileName) => {
console.log(fileName);
// ... here your function to comunicate with Java
});
let tempFileObject;
registry.register(tempFileObject, filename);
这里我们创建一个 FinalizationRegistry
实例,并使用 .register
将 js 'tempFile' 附加到它。一旦“tempFile”被垃圾回收,传递给 FinalizationRegistry
方法的回调函数就会与 java 进行通信。
可能重复
How to implement function that fires when JavaScript object is garbage collected?
关于javascript - Javascript 对象可以有 "on garbage collect"回调吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11864044/