我正在开发一个音频流应用程序,但在一些设备上,应用程序在30秒后终止。用户可以在后台流式播放音频,但有时会停止播放,应用程序会终止。
这是非常恼人的,很难追踪,因为它只影响几个设备,而不是所有时间。以下是日志显示的内容:
V/MediaPlayer-JNI: release
V/MediaPlayer-JNI: setListener
disconnected
V/MediaPlayer-JNI: destructor
disconnected
W/MediaPlayer: mediaplayer went away with unhandled events
D/ContentValues: onDestroy
Application terminated.
看起来这个应用被操作系统简单地杀死了。
当音频文件没有正确启动时,"mediaplayer with unhandled events“是一个常见的问题,但在这种情况下,错误发生在30秒后的流媒体上。
这是我使用的代码:
public class SoundService extends Service implements MediaPlayer.OnPreparedListener, MediaPlayer.OnSeekCompleteListener, MediaPlayer.OnCompletionListener, MediaPlayer.OnBufferingUpdateListener, MediaPlayer.OnErrorListener {
public void onCreate() {
Log.i("Script", "onCreate");
if(player == null){
try {
Log.i("Script", "onCreate: Try");
player = new MediaPlayer();
player.setDataSource("enter url");
player.prepareAsync();
player.setOnBufferingUpdateListener(this);
player.setOnCompletionListener(this);
player.setOnErrorListener(this);
player.setOnPreparedListener(this);
player.setOnSeekCompleteListener(this);
}
catch (IllegalArgumentException e) { e.printStackTrace(); }
catch (SecurityException e) { e.printStackTrace(); }
catch (IllegalStateException e) { e.printStackTrace(); }
catch (IOException e) { e.printStackTrace(); }
}
else{
Log.i("Script", "onCreate: start");
player.start();
}
}
以下是监听程序:
@Override
public void onPrepared(MediaPlayer mp) {
Log.i("Script", "onPrepared()");
player.start();
}
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("Script", "onStartCommand");
return Service.START_NOT_STICKY;
}
有什么想法吗?谢谢!
发布于 2019-04-09 23:55:03
确保使用startForeground通知在服务中启动媒体播放器。这应该会保留服务,而不会让操作系统杀死它。
https://stackoverflow.com/questions/55578586
复制相似问题