2013-07-25 2 views
0

Я заметил, что всякий раз, когда поток, который запускается с объектом Looper, завершен (т. Е. Looper.quit()), некоторые файлы остаются открытыми (обычно 3 файла). Вы можете видеть, что при запуске «adb shell ls/proc // fd | wc -l» Это происходит потому, что MessageQueue внутри Looper никогда не освобождается, хотя он никогда не используется. Только если я вызываю метод finalize() на MessageQueue, то эти файлы освобождаются. Файлы могут оставаться открытыми через несколько часов после завершения потока. Это вызывает проблему, когда эти потоки запускаются в системном процессе, потому что есть много открытых файлов, и я не могу превышать границу 1024 файла. (кстати, даже когда я звоню System.gc() не завершит MessageQueue)Android Looper завершает работу, но сохраняет открытые файлы/трубы

Есть в любом случае (без использования отражения), чтобы иметь MessageQueue метод финализации вызывается? Мне кажется, как ошибка в Android, что GC не делает этого сам по себе, даже если количество открытых файлов велико.

Благодаря

+1

Я думаю, вам стоит опубликовать отчет об ошибке http://code.google.com/p/android/issues/list – NitroG42

ответ