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