Экземпляр 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 в области приложения, сделав его глобальной переменной вашего основного / пользовательского интерфейса деятельности.

Другие вопросы по тегам