Как отвязать услугу при остановке активности?

Пытаюсь сделать музыкальный плеер. Для этого я создаю службу, которая управляет объектом MediaPlayer и воспроизводит песни. Но каждый раз, когда я снова открываю свое музыкальное приложение, оно запускает новую службу и продолжает воспроизводить две песни одновременно. Как я могу привязать свою активность к уже запущенной службе?

Я заметил, что когда я не вызываю unbindService (...) в методе OnStop (), мое приложение работает нормально. Но я не знаю, имеет ли это право не снимать привязку, когда деятельность прекращается.

Я связываю так:

@Override
protected void onStart() {
    super.onStart();

    Intent service = new Intent(this,MyService.class);

    bindService(service, mConnection, Context.BIND_AUTO_CREATE);
}

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

    if(mBound) {
        unbindService(mConnection);

        mBound = false;
    }
}

person ferrazrafael    schedule 10.02.2014    source источник
comment
Почему бы вам не использовать вместо этого intentservice?   -  person youssefhassan    schedule 11.02.2014
comment
Разве IntentService не слишком прост для музыкального проигрывателя? Когда играет музыка, мне нужно взаимодействовать с объектом MediaPlayer, например менять музыку или искать в музыке. Разве IntentService не полезен только для простых длительных фоновых операций?   -  person ferrazrafael    schedule 11.02.2014
comment
Я пытаюсь следовать примеру из этой документации developer.android.com/guide /components/bound-services.html   -  person ferrazrafael    schedule 11.02.2014


Ответы (2)


Вам нужно проверить onStart (), работает ли служба или нет. Если сервис уже запущен, то его нужно просто привязать. Но в вашем текущем коде вы каждый раз создаете сервис.

Вам следует попробовать использовать Service.START_STICKY для проверки того, запущена ли служба или нет. Вы можете увидеть: Service, start Sticky или start not sticky

Думаю, это поможет вам обновить свой класс обслуживания.

person Shahinoor Shahin    schedule 11.02.2014

Я мог бы исправить это, добавив startService (...) к методу OnStart (). Я не понимал, почему это исправлено, но, похоже, мне нужно это сделать. Если кто знает зачем, добавьте. Спасибо всем за помощь.

вот как получился OnStart:

@Override
protected void onStart() {
    super.onStart();

    Intent service = new Intent(this,MyService.class);

    bindService(service, mConnection, Context.BIND_AUTO_CREATE);

    startService(service);
}
person ferrazrafael    schedule 11.02.2014