我需要监控一个文件夹中的所有文件,当一个文件打开(FileObserver.OPEN)时,我想执行一个方法。问题是有时候,FileObserver实例是由GC收集的,我尝试这样做:
final MyFileObserver fo = new MyFileObserver("/mnt/sdcard/Musicas");
threadFileObserver = new Runnable() {
@Override
public void run() {
fo.startWatching();
}
};
t = new Thread(threadFileObserver);
t.run();但正在被收集。问题是,对于不收集的FileObserver实例,最好的解决方案是什么?
谢谢!
发布于 2011-05-25 21:27:30
我猜startWatching()方法会立即返回,线程运行完毕,方法也会返回。此时,作为局部变量的FileObserver在任何地方都不可见。您的线程已完成运行,并且没有对它的引用。两者都是垃圾回收的。将FileObserver定义为静态变量或非垃圾回收对象中的字段,而不是方法中的局部变量。
发布于 2011-05-25 21:24:42
通过将fo设置为main/UI活动的全局变量,将其保留在应用程序范围内。
https://stackoverflow.com/questions/6125086
复制相似问题