Android: Почему конструктор для SoundPool не рекомендуется?

Означает ли это, что мы больше не можем его использовать?  Что следует использовать, если минимальный API установлен ниже 21? Кроме того, можно ли игнорировать предупреждение, поскольку старые приложения, созданные с использованием его, работают над новыми ОС?

Ответ 1

Почему конструктор SoundPool устарел

Старый конструктор SoundPool был устарел в пользу использования SoundPool.Builder, чтобы создать объект SoundPool. старый конструктор имел три параметра: maxStreams, streamType и srcQuality.

  • Параметр maxStreams может быть установлен с помощью Builder. (И если вы не установите его, по умолчанию он равен 1.)
  • Параметр streamType заменяется на AudioAttributes, который более описателен, чем streamType. (См. Различные константы типа потока, начиная с здесь.) С помощью AudioAttributes вы можете указать использование (почему вы играете звук), контент тип (что вы играете) и флаги (как играть в нее).
  • Предполагалось, что параметр srcQuality должен установить качество преобразователя частоты дискретизации. Однако он никогда не был реализован, и установка его не имела никакого эффекта.

Таким образом, SoundPool.Builder лучше старого конструктора, потому что maxStreams не нужно явно устанавливать, AudioAttributes содержит больше информации, чем streamType, и бесполезный параметр srcQuality был устранен. Вот почему старый конструктор устарел.

Использование устаревшего конструктора для поддержки версий до API 21

Вы все равно можете использовать старый конструктор и игнорировать предупреждения, если хотите. "Устаревший" означает, что он по-прежнему работает, но больше не является рекомендуемым способом выполнения действий.

Если вы хотите использовать новый конструктор при сохранении старых версий, вы можете использовать оператор if для выбора версии API.

SoundPool mSoundPool;
int mSoundId;

//...

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
     mSoundPool = new SoundPool.Builder()
            .setMaxStreams(10)
            .build();
} else {
    mSoundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 1);
}

mSoundId = mSoundPool.load(this, R.raw.somesound, 1);

// ...

mSoundPool.play(mSoundId, 1, 1, 1, 0, 1);

Смотрите это видео для более подробной информации.

Ответ 2

Используйте SoundPool.Builder. Был изменен способ создания SoundPool. Вам предлагается использовать новый способ.