2012-08-08 118 views
0

我正在编写一个Android应用程序,该应用程序在大多数UI中使用WebView中的Javascript。我已经暴露给JS一个简单的界面来创建临时文件。在Java中,我提供了一个函数来创建一个临时文件,该文件返回一个文件ID和一组函数,用于在给定ID的临时文件上进行操作。在JS中,我用一个TempFile对象封装了这些函数,该对象在内部跟踪自己的ID。Javascript对象可以有一个“垃圾回收”回调吗?

这个问题是Java端有一个文件列表,但对JavaScript中代表它们的对象一无所知。所以当在JS中收集TempFile时,文件对象仍然在Java端。是否有一个“oncollect”或回调函数,我可以用它告诉Java释放与已收集的TempFile相对应的文件?

回答

1

我相当肯定的答案是“不” - 你不能挂接到JS垃圾收集过程中以同样的方式,你可以使用Java的终结(或ReferenceQueues)。

您可以改为更声明地处理?你的问题似乎意味着你的系统“知道”什么时候不再需要文件的唯一方式就是当它被GCed(或换句话说,你的系统根本不知道)。你真的在整个应用程序中引用这些文件吗?最好的做法是将这些资源用于定义良好的生命周期,以便创建临时文件的系统部分在完成后还负责销毁它。

在该模型下,当您(明确)使用JS销毁文件时,可以调用回Java来执行所需的清理。

通过简单地删除所有对它的引用来释放资源,就像你现在所做的那样,这不是特别好的做法。

0

不需要。当您不再需要这些文件时,您需要从JavaScript中调用Java函数。