android.media.SoundPool вызывает утечку памяти? - PullRequest
0 голосов
/ 16 августа 2010

Я обнаружил, что этот код может привести к утечке памяти на Android 2.1


    SoundPool soundPool = new SoundPool(10, 7, 0);
    ...
    ...
    soundPool = null;

каждый раз после выполнения, вставка MAT сообщает, что два объекта String "android: unnamed_thread" добавляются в кучу процесса. это проблема?

Ответы [ 2 ]

2 голосов
/ 04 ноября 2010

Вы пытались запустить soundPool.release () вместо soundPool = null?

0 голосов
/ 16 августа 2010

Я вижу две возможности (может быть хорошо больше).

Первое (наиболее вероятное) верно для всех объектов Java: только потому, что вы установили ссылку на nullне означает автоматически, что объект, стоящий за ним, будет собирать мусор.

Если сам объект SoundPool содержит ссылку на два объекта потока, ни один из трех не обязательно будет GC'-удален до пробелатребуется (хотя это, конечно, зависит от того, насколько агрессивен ваш сборщик).

Второе (менее вероятное) - это то, что Android может быть достаточно умен для кеширования потоковых (или даже SoundPool) объектов в случаеони должны быть использованы снова.Они могут сделать это как оптимизацию производительности, если создание объекта обходится дороже, чем повторное циклирование объекта.

В этом случае у них все равно будет ссылка на объекты где-то в кэше, и они не будутсчитается правомочным на сборку мусора.

...