Как остановить сервис, когда приложение идет в фоновом режиме - PullRequest
0 голосов
/ 11 июня 2018

У меня есть приложение для нескольких действий.В основной деятельности инициируется служба, которая играет музыку.Когда я перемещаюсь по действиям, музыка все еще играет (что-то, что я хочу), но музыка все еще играет, когда я нажимаю кнопку домой, и приложение уходит в фоновом режиме (что-то, что я не хочу).

  1. Моим первым решением было сделать stopService () onPause основной активности, но это помешало воспроизвести музыку в других действиях.

  2. Пробовал то же самое в методе onStop, возникла та же проблема.

Q : Как я могу остановить воспроизведение музыки (остановить службу), когда все приложение работаетв фоновом режиме?

Мой сервисный код:

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);

PS Спасибо за все ответы, нокак я уже сказал, методы onStop останавливают музыку, когда я меняю действия, чего я не хочу.

Ответы [ 4 ]

0 голосов
/ 29 июня 2018

Нашел это решение в похожем вопросе, который использует Application.ActivityLifecycleCallbacks в классе приложения, чтобы проверить, когда приложение переходит в фоновый режим, а затем отправить широковещательную рассылку в службу, чтобы остановить его.

Подробнее: СтопСервис MediaPlayer, когда приложение переходит в фоновый режим

0 голосов
/ 11 июня 2018

используйте onStop () или onPause () для остановки службы, а не onDestroy ();

onStop () - когда приложение выходит из строя (не видно)

onPause () - когдапоявляется любое всплывающее окно

0 голосов
/ 11 июня 2018

Здесь - фактический ответ, попробуйте это.По какой-то причине служба не останавливается, когда приложение переходит в фоновый режим

. Оно останавливалось задолго до вашего вызова stopService (), так как оно останавливалось после возврата onHandleIntent () через миллисекунды после его создания.

То, что не останавливает, - это ваш таймер, который работает в фоновом потоке и будет работать до тех пор, пока вы не отмените его или процесс не прекратится.

ИМХО, это нецелевое использование IntentService.Если вы хотите контролировать срок службы, используйте Сервис и остановите фоновую работу в onDestroy ().

0 голосов
/ 11 июня 2018

В соответствии с жизненным циклом Activity вы должны использовать onStop (), чтобы остановить воспроизведение звука от beign

enter image description here

Помните, что onStop ()

Может никогда не вызываться в ситуациях с нехваткой памяти, когда системе не хватает памяти для поддержания процесса вашей активности после вызова метода onPause ().

Так что это должнорешить вашу проблему, сделав это таким образом

@Override
public void onStop() {
    super.onStop();

     if(player.isPlaying()){
        player.stop();
        player.release();
        }
}
...