android-studio - MediaPlayer 流媒体挂起应用程序并在连接缓慢时崩溃
问题描述
我正在构建一个广播流媒体应用程序。当我有良好的互联网连接时,一切都很好,即使在多任务处理时也是如此。问题是没有互联网连接或互联网连接不佳。
在您点击播放按钮的那一刻,应用程序会冻结,并且仅在音频流开始时恢复。对于慢速连接,这可能需要几秒钟,挂起应用程序。如果没有互联网,应用程序最终会在一段时间后崩溃。
public class SoundService extends Service {
MediaPlayer mp;
@Override
public IBinder onBind(Intent intent) {
return null;
}
public void onCreate() {
mp = new MediaPlayer();
try {
mp.setDataSource("stream_url");
} catch (IllegalArgumentException e) {
e.printStackTrace();
Log.v(TAG, "Error 1");
onDestroy();
} catch (IllegalStateException e) {
e.printStackTrace();
Log.v(TAG, "Error 2");
onDestroy();
} catch (IOException e) {
e.printStackTrace();
Log.v(TAG, "Error 3");
onDestroy();
}
try {
mp.prepare();
mp.start();
} catch (IllegalStateException e) {
e.printStackTrace();
Log.v(TAG, "Error 4");
onDestroy();
} catch (IOException e) {
e.printStackTrace();
Log.v(TAG, "Error 5");
onDestroy();
}
}
public int onStartCommand(Intent intent, int flags, int startId) {
mp.start();
return Service.START_NOT_STICKY;
}
public void onDestroy() {
mp.stop();
mp.release();
stopSelf();
super.onDestroy();
}
}
这就是我启动流(播放按钮)的方式:
startService(new Intent(MainActivity.this, SoundService.class));
在没有连接的情况下,应用程序最终会收到错误号 5,但这仅在崩溃时发生,因此停止播放器为时已晚。在此之前,我没有得到任何“捕获”。
作为临时解决方法,我在开始流式传输之前检查互联网连接。这样我可以防止崩溃,但我仍然遇到应用程序挂在慢速连接上的问题。
有任何想法吗?谢谢!
解决方案
使用此代码可能对您有所帮助
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start();
}
});
推荐阅读
- influxdb - 是否可以在 Influxdb 中获得聚合数据的百分位数?
- amazon-web-services - 我们可以阻止 aws 代码提交存储库中的特定分支吗
- python - 如何按日/月/年按时间戳列分组,并在 Django 中同时选择该时间戳列
- python - 为什么我的情节不显示?我试过show(),我试过手动调用,还是没用?
- amazon-s3 - 将环境变量存储在 s3 文件中,当导入到本地系统时,应用程序在使用参数时会导致参数错误
- ajax - Shopify 中的内容安全违规
- pdf - 使用设置字体系列将 Markdown 转换为 pdf:Times New Roman
- typescript - 从对象数组创建一个 1-n
- python-3.x - 如何在时间戳数据框中按月求和?
- google-sheets - 添加新的命名范围时,公式中的命名范围会发生变化