【问题标题】:Android Java - SoundPool sounds stop playing for some reasonAndroid Java - SoundPool 声音由于某种原因停止播放
【发布时间】:2013-12-02 05:12:00
【问题描述】:

好吧,我使用 SoundPool onClick on ImageView 声音,其中一些启动另一个 Activity。像这样:

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    switch (v.getId()){
    case R.id.main_menue_status:{
button_click.play(button_clickID, 1,1, 0, 0, 1); //this is SoundPoool's play
    Intent intent=new Intent(context,MainMenueActivity.class);
        startActivity(intent);
        finish();
    }

其他活动具有相同的 ImageViews(实际上是按钮)来浏览应用程序。 我一直使用finish();以防止创建数百万个活动副本。 所以在 SoundPool 播放大约 30 次后,声音就完全停止播放了。

我的猜测是因为我在声音完成之前完成()活动它正在播放,所以不知何故系统完全停止播放任何 SoundPool。

有什么建议吗?

UPD:日志:

12-01 19:04:49.797: E/AudioTrack(19981): AudioFlinger could not create track, status: -12
12-01 19:04:49.797: E/SoundPool(19981): Error creating AudioTrack

【问题讨论】:

  • 您如何以及何时加载您的声音资源?我相信“状态:-12”是内存不足错误。我认为要么您加载的声音太大,要么您在加载的音轨上达到设备上限,技术上是 32,但通常更少。
  • 每个 SoundPool 最多有 3 次播放(第一个参数),所以我在每个 Activity 中有 2-3 个 SoundPool 对象。当我离开活动时 - 我使用完成(),所以我假设 - 应该释放内存。
  • 情况可能并非如此。 finish() 不能保证 Activity 将立即完成。相反,我会尝试在 onResume() 中加载您的声音资源,并在 onPause() 中卸载。
  • 顺便说一句,SoundPool 构造函数中的第一个参数是 同时 流的最大数量,而不是可加载资源的最大数量。
  • 我知道流,只是使用了错误的术语。我怎样才能卸载它们?

标签: java android audio soundpool


【解决方案1】:

我相信“状态:-12”是内存不足错误。此外,在 Activity 中调用 finish() 并不能保证 Activity 会立即完成并释放资源。

由于您有多个 Activity 和多个 SoundPool,我建议您在 Activity 的 onResume() 方法中创建 SoundPool 并加载您的声音资源,然后在 onPause() 方法中卸载资源并释放 SoundPool。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多