#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. Спасибо, теперь я понял это.