Экземпляр 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 не будет собрано?
ТКС!!!
2 ответа
Я предполагаю, что метод startWatching() возвращается немедленно, ваш поток завершает работу, а ваш метод возвращается. На этом этапе ваш FileObserver, будучи локальной переменной, нигде не виден. Ваш поток завершил работу, и на него нет ссылок. Оба мусора собраны. Определите FileObserver как статическую переменную или поле в чем-то, что не является сборщиком мусора, а не в качестве локальной переменной в методе.
Держать fo
в области приложения, сделав его глобальной переменной вашего основного / пользовательского интерфейса деятельности.