【问题标题】:Audio Streaming: Prevent "Application Terminated" While on Background音频流:在后台防止“应用程序终止”
【发布时间】:2019-08-29 21:46:36
【问题描述】:

我正在开发一个音频流应用程序,但应用程序在一些设备上 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.

看起来该应用程序被操作系统简单地杀死了。

“媒体播放器因未处理的事件而消失”是音频文件未正确启动时的常见问题,但在这种情况下,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;
}

有什么想法吗?谢谢!

【问题讨论】:

  • 尝试将服务设为前台,看看是否是新服务 api 的问题

标签: android android-mediaplayer audio-streaming


【解决方案1】:

确保您在服务中启动媒体播放器并带有 startForeground 通知。这应该在不让操作系统杀死它的情况下保留服务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多