问题描述
|
当文件打开(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活动的全局变量,将其保留在应用程序范围内。