我使用绑定服务,以便我能够在活动和服务之间进行通信。
我绑定到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
方法(其中mPlayer
为MediaPlayer
):
@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的更多信息。