我有一个多活动应用。在主要活动中,启动播放音乐的服务。当我浏览活动时,音乐仍然在播放(这是我想要的东西)但是当我点击主页按钮并且应用程序进入后台(这是我不想要的)时,音乐仍在播放。
我的第一个解决方案是在主要活动暂停时执行'stopService()',但这阻止了音乐在其他活动中播放。
在onStop方法中尝试了同样的问题,发生了同样的问题。
问:当整个应用程序在后台运行时,如何停止播放音乐(停止服务)?
我的服务代码:
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方法在我改变我不想要的活动时停止了音乐。
答案 0 :(得分:1)
在类似的问题中找到了该解决方案,该问题使用Application类中的Application.ActivityLifecycleCallbacks
检查应用何时进入后台,然后将广播发送到服务以停止它。
答案 1 :(得分:0)
根据活动生命周期,你应该使用onStop()来阻止音频播放
请记住onStop()
在内存不足的情况下,可能永远不会被调用 系统没有足够的内存来保持您的活动 调用onPause()方法后运行的进程。
所以它应该以这种方式解决你的问题
@Override
public void onStop() {
super.onStop();
if(player.isPlaying()){
player.stop();
player.release();
}
}
答案 2 :(得分:0)
使用onStop()或onPause()来停止服务而不是onDestroy();
onStop() - 当app进入后台(不可见)时
onPause() - 出现任何弹出窗口时
答案 3 :(得分:0)
Here是实际答案,试试这个。 出于某种原因,当应用程序进入后台时,服务不会停止
它在你的stopService()调用之前很久就停止了,因为它在onHandleIntent()返回后停止了一次,在创建它之后的几毫秒。
什么没有停止的是你的Timer,它在后台线程上运行并将继续运行,直到你取消它或你的进程终止。
恕我直言,这是对IntentService的不当使用。如果要控制生命周期,请使用服务,并在onDestroy()中停止后台工作。