我正在编写一个Android应用程序,它在WebView中使用Javascript来处理大部分UI。我已经向JS公开了一个简单的界面来创建临时文件。在Java中,我提供了一个函数来创建一个临时文件,该文件返回一个文件ID,以及一组函数,用于对给定ID的临时文件进行操作。在JS中,我使用TempFile对象包装这些函数,该对象在内部跟踪它自己的ID。
这个问题是Java端有一个文件列表,但对Javascript中代表它们的对象一无所知。因此,当在JS中收集TempFile时,文件对象仍然在Java端。是否有“oncollect”或类似的回调,我可以用它来告诉Java释放与已收集的TempFile相对应的文件?
答案 0 :(得分:1)
我很确定答案是“不” - 你不能像使用Java的终结器(或ReferenceQueues
)一样挂钩JS垃圾收集过程。
你能否更具说服力地处理这个问题?您的问题似乎暗示您的系统“不知道”何时不再需要文件的唯一方式是它是GCed(或者换句话说,您的系统根本不知道)。你真的在整个应用程序中引用这些文件吗?好的做法是将这些资源与定义良好的生命周期一起使用,这样创建临时文件的系统部分也负责在完成后销毁它。
在该模型下,当您(显式)销毁JS中的文件时,可以回调Java以执行所需的清理。
通过简单地删除所有对它的引用来释放资源,就像你现在所做的那样,并不是特别好的做法。
答案 1 :(得分:0)
没有。当您不再需要文件时,需要从JavaScript调用Java函数。
答案 2 :(得分:0)
Javascript没有这样的钩子。
您需要为此用例显式创建close()函数或此类方法并调用它。
更多信息