javascript - Javascript 对象可以有 "on garbage collect"回调吗?

标签 javascript android webview garbage-collection

我正在编写一个 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/

相关文章:

javascript - Phonegap - 将图像从 url 保存到设备照片库中

android - Android Watch 中磁贴中的列布局

android - 如果我使用 BroadcastReceiver,Android CallScreeningService 放置在哪里?

javascript - 将数据保存到 LocalStorage,然后使用 android Java 检索它

javascript - 启用 JavaScript 的 Android WebView

ios - NSURLSession/NSURLConnection HTTP 加载失败(kCFStreamErrorDomainSSL,-9813)

javascript - 如何使用多核 CPU 提高游戏服务器性能

javascript - 将函数声明为变量

javascript - Google Map API - 本地图处于模态时,路线服务不会自动缩放

android - 仅从联系人列表 Android 中获取电子邮件地址