首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正在对FileObserver实例进行垃圾回收

正在对FileObserver实例进行垃圾回收
EN

Stack Overflow用户
提问于 2011-05-25 21:19:04
回答 2查看 3.1K关注 0票数 3

我需要监控一个文件夹中的所有文件,当一个文件打开(FileObserver.OPEN)时,我想执行一个方法。问题是有时候,FileObserver实例是由GC收集的,我尝试这样做:

代码语言:javascript
复制
    final MyFileObserver fo = new MyFileObserver("/mnt/sdcard/Musicas");
    threadFileObserver = new Runnable() {
        @Override
        public void run() {
            fo.startWatching();
        }
    };
    t = new Thread(threadFileObserver);
    t.run();

但正在被收集。问题是,对于不收集的FileObserver实例,最好的解决方案是什么?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-25 21:27:30

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

票数 3
EN

Stack Overflow用户

发布于 2011-05-25 21:24:42

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6125086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档