0

任何人都可以解释为什么会这样。我看到媒体播放器在模拟器上的表现如何,但有时在真实设备上崩溃了。我无法解决这个问题,因为模拟器没有显示错误。

创建mp的代码

            mp = new MediaPlayer();
        mp.setDataSource(myStream);
            mp.prepare(); //also consider mp.prepareAsync().

使用 stacktrace 发现的错误

java.lang.RuntimeException: An error occured while executing doInBackground()
    at android.os.AsyncTask$3.done(AsyncTask.java:200)
    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
    at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
    at java.lang.Thread.run(Thread.java:1096)
Caused by: java.lang.IllegalStateException
    at android.media.MediaPlayer._start(Native Method)
    at android.media.MediaPlayer.start(MediaPlayer.java:798)
    at myApp.activity.com.myApp.play(myApp.java:320)
    at myApp.activity.com.myApp$PlayOn.doInBackground(myApp.java:454)
    at myApp.activity.com.myApp$PlayOn.doInBackground(myApp.java:1)
    at android.os.AsyncTask$2.call(AsyncTask.java:185)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)

如果遵循 myApp.java 454,则崩溃的行

mp.start();

请解释或帮助我。我会很开心

问候,彼得。

4

1 回答 1

0

您只能在文档中明确描述MediaPlayer准备暂停时调用start

这里可能存在时间问题,导致该错误仅在某些情况下出现。即,如果您的代码的某些部分在另一部分代码之前运行,您MediaPlayer将处于错误状态并出现此崩溃。搜索调用状态转换方法的点,MediaPlayer看看是否有可能以错误的顺序调用它们。

看到你使用futures,如果你不注意,很容易以错误的顺序调用方法。

于 2012-01-23T10:32:12.657 回答