Присвоение null объекту SoundPool для экономии ресурсов

#java #android #null

#java #Android #null

Вопрос:

Может ли присвоение «null» объекту SoundPool сэкономить некоторые ресурсы для устройства, если звуковой файл уже загружен в память?

Ответ №1:

Если вы хотите освободить ресурсы… вызов SoundPool.release() . В javadoc говорится:

Освободите SoundPool ресурсы. Освободите всю память и собственные ресурсы, используемые SoundPool объектом. SoundPool Больше нельзя использовать, и ссылка должна быть установлена на null .

Простое обнуление переменной, содержащей SoundPool ссылку на ваше приложение, может сделать ее недоступной, а ресурсы могут быть возвращены сборщиком мусора в какой-то момент в будущем.

Однако, согласно моему прочтению API, если вы либо вызовете release , либо просто присвоите null переменной, вы больше не сможете вызывать SoundPool методы для воспроизведения, приостановки, возобновления и так далее звуковых файлов, которые вы ранее загрузили. Так что, вероятно, это не то, что вы хотите сделать.

Комментарии:

1. Спасибо за ваш ответ. Я попытался использовать SoundPool.release(), но после этого я не смог проверить существование объекта SoundPool в приложении через if (mSoundPool !=null) или if (mSoundPool ==null) . Я могу добавить дополнительный байт или логическую переменную для обозначения существующего объекта, но я не думаю, что это хорошая практика для экономии ресурсов.

2. Javadoc, который я вам процитировал, объясняет, что делать. » SoundPool Больше нельзя использовать, и ссылка должна быть установлена на null «. После вызова release на SoundPool установите ссылку на null . Чтобы было понятно, что вызов release() освобождает ресурсы, а присвоение null останавливает использование объекта … и дает вам возможность указать приложению, что ресурсы пула были освобождены.

3. Спасибо, теперь я понял это.