3

ファイルを開いたときに(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 !!!

4

2 に答える 2

3

startWatching() メソッドがすぐに返され、スレッドの実行が終了し、メソッドが返されると思います。この時点で、ローカル変数である FileObserver はどこからも見えません。あなたのスレッドは実行を終了しましたが、それへの参照はありません。どちらもガベージ コレクションです。FileObserver を、メソッド内のローカル変数としてではなく、ガベージ コレクションされていない静的変数またはフィールドとして定義します。

于 2011-05-25T13:27:30.463 に答える
1

foメイン/UI アクティビティのグローバル変数にすることで、アプリケーション スコープ内に保持します。

于 2011-05-25T13:24:42.077 に答える