Android mediaPlayer.prepare 或 mediaPlayer.setDataSource 中偶尔出现 IllegalStateException

问题描述 投票:0回答:1

我为一个用于移动数据收集的开源 Android 应用程序做出了贡献。它可以做的事情之一是自动播放问题的音频提示。我们最近看到有许多音频提示的表单崩溃。用户报告说这些崩溃是不可预测的并且无法重现。

我们看到

IllegalStateException
是从 Android 的
MediaPlayer.setDataSource
MediaPlayer.reset()
抛出的。没有异常信息。

reset
总是在这两个调用之前调用:

mediaPlayer.reset()
mediaPlayer.setDataSource(uri)
mediaPlayer.prepare()

完整来源

上面的代码是从 UI 线程中调用的。看看 Android 源,我看不出

IllegalStateException
会从哪里抛出。我能想到的唯一可能的问题是某种并发问题。关于如何解决此问题或重现它有什么想法吗?

android android-mediaplayer
1个回答
0
投票

我只是猜测:

重置可能需要更长的时间,这就是导致问题的原因:使用此代码在成功重置后进行准备工作:

mediaPlayer.reset();
mediaPlayer.setOnResetListener(new MediaPlayer.OnResetListener() {
    @Override
    public void onReset(MediaPlayer mp) {
        // Reset is complete, safe to setDataSource
        mediaPlayer.setDataSource(uri);
        mediaPlayer.prepareAsync(); // or prepare() depending on your use case
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.