Looper
オブジェクトで実行されるスレッドが終了する (つまりLooper.quit()
、呼び出される) ときはいつでも、いくつかのファイル (通常は 3 つのファイル) が開いたままになることに気付きました。" adb shell ls /proc//fd | wc -lMessageQueue
"を実行すると、これが発生することがわかりますLooper
。finalize()
でメソッドを呼び出した場合にのみMessageQueue
、これらのファイルが解放されます。スレッドが終了した後も、ファイルは数時間開いたままになる場合があります。これは、これらのスレッドがシステム プロセスで実行されるときに問題を引き起こします。これは、既に多くの開いているファイルがあり、1024 ファイル境界を超えることができないためです。(ところで、呼び出しSystem.gc()
てもファイナライズしませんMessageQueue
)
とにかく(リフレクションを使用せずに)MessageQueue
ファイナライズメソッドを呼び出すことはできますか?開いているファイルの数が多い場合でも、GC がそれ自体を実行しないのは、Android のバグのように思えます。
ありがとう