我遇到了一个严重的问题,媒体播放器 (MP) 卡在 prepare()
方法中。
我的应用程序在 AsyncTask
中运行 prepare()
以避免阻塞 UI,因为源来自网络。有几个用户可以随时单击的“播放”按钮,因此我在同步方法中添加了 prepare()
以更好地控制 MP 的状态。我的应用程序还调用 release()
onPause 来释放已使用的资源。
事情是,我注意到如果在准备时调用 release()
,prepare()
永远不会返回,所以我被困在同步方法中。最糟糕的是 AsyncTask
线程处于死锁状态,每次用户在该状态下单击播放时都会浪费另一个线程,因为它一直在等待获取拥有的监视器永不返回的 prepare()
。很快我所有的 AsyncTasks
线程都被浪费了,由于我大量使用它们,我的应用程序停止工作。
所以我的问题是:有人知道如何克服这个问题吗?我正在认真考虑使用 MediaPlayer 重做我的所有工作,但我需要事先知道处理此类情况的最佳方法。
最佳答案
您应该改用 prepareAsync()
。而且您不需要 AsyncTask
只是为了 MediaPlayer
准备。
关于Android MediaPlayer 卡在 prepare() 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8511210/