Java 应用程序进入后台时如何停止服务
我有一个多活动应用程序。在主活动中,启动播放音乐的服务。当我浏览活动时,音乐仍在播放(这是我想要的),但当我单击“主页”按钮,应用程序进入后台时,音乐仍在播放(这是我不想要的)Java 应用程序进入后台时如何停止服务,java,android,service,media-player,Java,Android,Service,Media Player,我有一个多活动应用程序。在主活动中,启动播放音乐的服务。当我浏览活动时,音乐仍在播放(这是我想要的),但当我单击“主页”按钮,应用程序进入后台时,音乐仍在播放(这是我不想要的) 我的第一个解决方案是在主活动暂停时执行“stopService()”,但这会阻止音乐在其他活动中播放 在onStop方法中尝试了相同的方法,出现了相同的问题 Q:当整个应用程序在后台运行时,如何停止播放音乐(停止服务) 我的服务代码: public class MediaService extends Service {
public class MediaService extends Service {
private MediaPlayer player;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
player = MediaPlayer.create(this, R.raw.music);
player.setLooping(true);
player.start();
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
player.stop();
}
我通过以下方式启动/停止服务:
music_intent = new Intent(this, MediaService.class);
startService(music_intent);
stopService(music_intent);
p.S.谢谢所有的答案,但正如我所说,当我改变活动时,onStop方法会停止音乐,这是我不想要的。根据活动生命周期,你应该使用onStop()停止播放音频 记住onStop() 在内存不足的情况下,可能永远不会调用 系统内存不足,无法保存活动的 调用onPause()方法后运行的进程 所以用这种方法应该可以解决你的问题
@Override
public void onStop() {
super.onStop();
if(player.isPlaying()){
player.stop();
player.release();
}
}
使用onStop()或onPause()停止服务,而不是onDestroy()
onStop()-当应用程序进入后台时(不可见)
onPause()-当出现任何弹出窗口时,请尝试此操作。
由于某些原因,当应用程序转到后台时,服务不会停止
它在stopService()调用之前很久就停止了,因为它在创建之后的毫秒内,在handleintent()返回时停止了
不停止的是计时器,它在后台线程上运行,并将继续运行,直到您取消它或进程终止
恕我直言,这是对IntentService的不当使用。如果要控制寿命,请使用onDestroy()中的服务并停止后台工作。在使用应用程序的类似问题中找到此解决方案。ActivityLifecycleCallbacks在应用程序类中检查应用程序何时进入后台,然后向服务发送广播以停止它
更多信息:首先,您为什么要提供服务?服务背后的要点是在UI不在前台时执行工作。如果您只希望在应用程序处于前台时完成工作,请不要使用服务。使用普通Java对象。要想知道你的应用程序何时从前景中走来,请考虑<代码> ProcessLifecycleOwner 。OnStand方法在我改变活动时停止音乐,这是我不想做的事情。停止方法,当我改变那些我不想要的活动时,停止音乐。