Android: 为什么SoundPool的构造函数被废弃了?

24

这是否意味着我们不能再使用它了? 如果最小API设置在21以下,我们应该使用什么? 而且,忽略警告并使用旧版应用程序在新操作系统上工作是可以的吗?


4
关于“为什么开发者X做了Y事”的问题,不适合在Stack Overflow上提出。通常能够提供清晰答案的只有开发者X本人,而且开发者X不太可能会看到你的问题。其他人只能提供意见。 “这是否意味着我们不能再使用它了?”- 欢迎您使用它,但如果您的项目的minSdkVersion为21或更高,则应该使用SoundPool.Builder。 “如果min API设置低于21,应该使用什么?”- 您只能使用SoundPool构造函数。 - CommonsWare
谢谢。这是否意味着如果我继续使用构造函数就不会有问题?另外,如果只是用MediaPlayer播放短声音,也不会有问题,对吗? - Harsha
1
那么这是否意味着如果我继续使用构造函数就不会有问题了?-- 目前是的。 "另外,如果只是播放短声音,我不能使用MediaPlayer并且没有注意到任何问题吗?" -- SoundPool 提供与 MediaPlayer 不同的功能(例如,优先级流)。我不会仅仅因为它的构造函数已被弃用而避免使用 SoundPool。至于 SoundPool 是否符合您的整体需求,我无法说。 - CommonsWare
谢谢,我刚刚在一个应用程序中使用了它们来了解它。我还在这里提供了一个关于它的答案:https://dev59.com/PWYr5IYBdhLWcg3wn7gc#39184503 - Harsha
可能是Deprecated meaning?的重复问题。 - Laurel
2个回答

45

为什么SoundPool构造函数被弃用

旧的SoundPool构造函数已被弃用,建议使用SoundPool.Builder来构建SoundPool对象。旧构造函数有三个参数:maxStreamsstreamTypesrcQuality

  • maxStreams参数仍然可以通过Builder进行设置。(如果不设置,默认为1。)
  • streamType参数被AudioAttributes取代,这比streamType更具描述性。(查看从这里开始的不同流类型常量。)使用AudioAttributes,您可以指定用途(为什么播放声音),内容类型(正在播放什么),以及标志(如何播放它)。
  • srcQuality参数据说是用于设置采样率转换器的质量。但是,它从未得到实现,设置它也没有任何效果。
因此,SoundPool.Builder 比旧的构造器更好,因为不需要显式设置 maxStreamsAudioAttributes 包含比 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);

观看此视频以获取更多细节。


谢谢你的回答,所以如果另一种构建对象的方式更具描述性,为什么不将其作为另一个构造函数添加,因为Java允许多个构造函数,他们为什么要特别指出这种方法不再使用? - Harsha
@Harsha,使用Builder不仅仅是添加一个新的构造函数。它是一个用于构建(或构造)SoundPool的新类。这种设计模式似乎是一种趋势。(例如StaticLayout.Builder)。但即使他们只是添加了一个新的构造函数,通常也会弃用不再推荐使用的旧构造函数(请参见Java Date)。 - Suragch

3
使用SoundPool.Builder代替。创建SoundPool的方式已经改变,建议使用新的方式。

我看了一下,但我也需要知道它为什么被弃用以及如果它仍在使用会发生什么。 - Harsha
请查看这个问题:https://dev59.com/DXI-5IYBdhLWcg3wI0x9 - Augusto Carmo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接