FileObserver实例正在被垃圾回收

问题描述

| 当文件打开(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实例的最佳解决方案是什么? 谢谢!     

解决方法

我猜想startWatching()方法立即返回,您的线程完成运行,并且您的方法返回。此时,您的FileObserver是一个局部变量,在任何地方都看不到。您的线程已运行完毕,没有引用。两者都是垃圾收集。将FileObserver定义为静态变量或未垃圾回收的字段,而不是方法中的局部变量。     ,通过使main1 making成为主/ UI活动的全局变量,将其保留在应用程序范围内。