FileObserver实例正在被垃圾收集

时间:2011-05-25 13:19:04

标签: android multithreading fileobserver

我需要监视文件夹中的所有文件,当文件打开时(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 !!!

2 个答案:

答案 0 :(得分:2)

我猜测startWatching()方法立即返回,你的Thread完成运行,你的方法返回。此时,作为局部变量的FileObserver在任何地方都不可见。你的线程已经完成运行,没有引用它。两者都是垃圾收集。将FileObserver定义为静态变量或非垃圾收集的字段,而不是方法中的局部变量。

答案 1 :(得分:1)

fo保留在应用程序范围内,方法是将其作为主/ UI活动的全局变量。