0

我注意到,每当与Looper对象一起运行的线程完成(即被Looper.quit()调用)时,一些文件仍保持打开状态(通常为 3 个文件)。您可以通过运行“ adb shell ls /proc//fd | wc -l ”看到,这是因为MessageQueue内部Looper从未被释放,尽管它​​从未被使用过。只有当我调用 上的finalize()方法时MessageQueue,这些文件才会被释放。线程完成后,文件可能会保持打开状态。当这些线程在系统进程中运行时,这会导致问题,因为已经有很多打开的文件,并且我不能超过 1024 文件边界。(顺便说一句,即使我打电话给System.gc()它也没有敲定MessageQueue

无论如何(不使用反射)MessageQueue调用 finalize 方法?在我看来,即使打开文件的数量很大,GC 也不会自行完成这件事,这就像 Android 中的一个错误。

谢谢

4

1 回答 1

0

@NitroG42 事实证明有人打败了我并在大约一年前发布了这个错误。它目前分配给 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 回答