0

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

とにかく(リフレクションを使用せずに)MessageQueueファイナライズメソッドを呼び出すことはできますか?開いているファイルの数が多い場合でも、GC がそれ自体を実行しないのは、Android のバグのように思えます。

ありがとう

4

1 に答える 1

0

@NitroG42は、誰かが私を打ち負かし、ほぼ1年前にこのバグを投稿したことが判明したためです。現在は JBQ に割り当てられています。バグ レポートはこちらにあります: http://code.google.com/p/android/issues/detail?id=41645&q=messagequeue&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars&

于 2013-07-25T09:29:34.543 に答える