我需要监视文件夹中的所有文件,当文件打开时(FileObserver.OPEN)我想执行一个方法。问题有一次,GC收集了FileObserver实例,我试过这个:
final MyFileObserver fo = new MyFileObserver("/mnt/sdcard/Musicas");
threadFileObserver = new Runnable() {
@Override
public void run() {
fo.startWatching();
}
};
t = new Thread(threadFileObserver);
t.run();
但正在收集。 问题是,没有收集FileObserver实例的最佳解决方案是什么?
TKS !!!
答案 0 :(得分:2)
我猜测startWatching()方法立即返回,你的Thread完成运行,你的方法返回。此时,作为局部变量的FileObserver在任何地方都不可见。你的线程已经完成运行,没有引用它。两者都是垃圾收集。将FileObserver定义为静态变量或非垃圾收集的字段,而不是方法中的局部变量。
答案 1 :(得分:1)
将fo
保留在应用程序范围内,方法是将其作为主/ UI活动的全局变量。