我的程序是音乐播放器,并且我的Android Media Player在该服务上运行。这里的问题是,当杀死我的应用程序时,该服务将重新启动,并且播放器将从头开始工作。
public class AudioPlayerService extends Service implementsMediaPlayer.OnPreparedListener {
private String url = "https://www.dev2qa.com/demo/media/test.mp3";
private MediaPlayer mediaPlayer = null;
private String TAG = "AudioPlayerService";
@Override
public void onCreate() {
super.onCreate();
Log.i(TAG,"onCreate");
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setLooping(true);
try {
mediaPlayer.setDataSource(url);
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.prepareAsync(); // might take long! (for buffering, etc)
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
}
});
mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
return false;
}
});
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY_COMPATIBILITY;
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
mediaPlayer.release();
}
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start();
}
}
我的程序是音乐播放器,并且我的Android Media Player在该服务上运行。这里的问题是,当杀死我的应用程序时,该服务将重新启动,并且播放器将从头开始工作。
答案 0 :(得分:0)
如果用户使用“ Android设置->应用程序-> your_app”页面中的相应按钮手动杀死该应用程序,则其所有活动,线程和服务都会被杀死,因为这是用户的决定。在这种情况下,那些被杀死的东西仍然被阻止。
仅当服务被系统杀死(以在LowMemory情况下恢复内存资源)时,如果使用STICKY标志(如您所做的那样),服务将自动重新启动。
重新启动用户选择终止的服务不是一个好习惯,但是您可以使用以下命令来完成此操作:https://developer.android.com/training/scheduling/alarms(通过在播放执行过程中每隔几秒钟创建一个警报)< / p>
是的,如果您无法解决此问题,则在重新启动服务后,播放器将从头开始重新启动。因此,我认为您必须将当前位置保存在某个位置,并在系统或我之前链接的SchedulingAlarms重新启动服务时读取该位置。