Android:为什么SoundPool的构造函数不推荐使用?

Har*_*sha 16 java audio android constructor deprecated

这是否意味着我们不能再使用它了?如果min API设置低于21,我们应该使用什么?此外,是否可以忽略该警告,因为使用它构建的旧应用程序可以在新操作系统上运行?

Sur*_*gch 29

为什么不推荐使用SoundPool构造函数

旧的SoundPool构造函数已弃用,转而使用SoundPool.Builder构建SoundPool对象.在老的构造函数有三个参数:maxStreams,streamTypesrcQuality.

  • 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);
Run Code Online (Sandbox Code Playgroud)

观看此视频了解更多详情.