3

我需要监视文件夹中的所有文件,当打开文件时(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 实例不被收集的最佳解决方案是什么?

谢了!!!

4

2 回答 2

3

我猜 startWatching() 方法会立即返回,您的线程完成运行,并且您的方法返回。此时,您的 FileObserver 作为一个局部变量,从任何地方都看不到。您的线程已完成运行,并且没有对其的引用。两者都是垃圾收集。将 FileObserver 定义为静态变量或非垃圾收集的字段,而不是方法中的局部变量。

于 2011-05-25T13:27:30.463 回答
1

通过将其设为主/UI Activity 的全局变量,将其保留fo在应用程序范围内。

于 2011-05-25T13:24:42.077 回答