Экземпляр FileObserver в процессе сборки мусора - PullRequest
3 голосов
/ 25 мая 2011

Мне нужно отслеживать все файлы в папке, когда файл открывается (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 не нужно собирать?

tks !!!

Ответы [ 2 ]

2 голосов
/ 25 мая 2011

Я предполагаю, что метод startWatching () немедленно возвращается, ваш поток завершает работу и ваш метод возвращается. На этом этапе ваш FileObserver, будучи локальной переменной, нигде не виден. Ваш поток завершил работу, и на него нет ссылок. Оба мусора собраны. Определите FileObserver как статическую переменную или поле в чем-то, что не является сборщиком мусора, а не в качестве локальной переменной в методе.

1 голос
/ 25 мая 2011

Оставьте fo в области приложения, сделав его глобальной переменной вашего основного / пользовательского интерфейса.

...