Android 正在对FileObserver实例进行垃圾收集

Android 正在对FileObserver实例进行垃圾收集,android,multithreading,fileobserver,Android,Multithreading,Fileobserver,我需要监视文件夹中的所有文件,当文件打开时(FileObserver.OPEN),我要执行一个方法。问题是,有时FileObserver实例是由GC收集的,我尝试了以下方法: final MyFileObserver fo = new MyFileObserver("/mnt/sdcard/Musicas"); threadFileObserver = new Runnable() { @Override public void run() {

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


tks

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

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

您在哪里声明了静态?此外,即使您的应用程序UI未显示,您是否也在尝试跟踪文件发生的情况?你想做的事情背后的动机是什么?在主要活动中。我想我需要让活动在后台进程或类似的程序中运行。是的,我创建了一个在后台进程中运行的服务,FileObserver的侦听器在服务启动后启动。使用此解决方案,不再收集FileObserver。谢谢你的帮助!!!你能把答案贴出来吗?那真的会帮助包括我在内的其他人。非常感谢。