重新创建或销毁带有MediaPlayer的Android服务

时间:2015-09-14 09:36:12

标签: android android-service android-mediaplayer android-service-binding

我使用绑定服务,以便我能够在活动和服务之间进行通信。

我绑定到onStart中的服务:

@Override
protected void onStart() {
    super.onStart();
    Intent bindIntent = new Intent(this, MusicService.class);
    bindService(bindIntent, this, BIND_AUTO_CREATE);
}

等待服务绑定:

@Override
public void onServiceConnected(ComponentName name, IBinder service) {
    mMusicService = ((MusicService.LocalBinder) service).getService();
    mMusicService.setCallback(this);
}

处理与服务的脱节:

@Override
public void onServiceDisconnected(ComponentName name) {
    mMusicService = null;
}

onDestroy中的服务解除绑定:

@Override
protected void onDestroy() {
    super.onDestroy();
    if (mMusicService != null && isFinishing()) {
        mMusicService.setCallback(null);
        unbindService(this);
    }  
}

我的问题是,当应用最小化时,会立即调用onDestroy,然后调用onUnbind中的Service并停止播放音乐。

以下是onUnbind方法(其中mPlayerMediaPlayer):

@Override
public boolean onUnbind(Intent intent) {
    mPlayer.stop();
    mPlayer.release();
    mPlayer = null;

    return super.onUnbind(intent);
}

如果我没有实现onUnbind音乐继续播放(有时候,有时会在一段时间后停止),当我再次打开应用程序时(从最小化的应用程序),我可以播放另一首歌曲那两首歌同时播放。

我在android上有关于音乐播放器和服务的红色文章,我认为这是正确的方法(认为当操作系统内存不足时会调用onDestroy)。

我有什么想法可以重新实现我的应用工作流程,以便我按预期工作?

修改

起初我以为"不要保持活动"在开发者选项下是一个问题,但即使我取消选中它也会出现问题。

如果需要我服务中的某些代码,请说我会编辑我的问题(这里有很多代码,而且我不确定哪个部分对此问题很重要)

SOLUTION:

startForeground(<notification id>, <notification>);

即使app被杀也能运行服务。当用户驳回通知时:

stopForeground(true);
stopSelf();

有关startForeground here的更多信息。

0 个答案:

没有答案