2016-03-20 3 views
4

В настоящее время мне нужна служба (Музыка), потому что мне нужно взаимодействовать с ней. Но я также хочу, чтобы не был остановлен, даже если все компоненты сами разделились.Не уничтожайте связанную службу по действию destroy

Как Android Developer Guide говорит

«[...] Несколько компонентов могут связываться со службой сразу, но когда все они отвязать, служба будет уничтожен.»

Руководство также говорит

«[...] ваш сервис может работать в обоих направлениях, она может быть запущена (для запуска на неопределенное время), а также позволяет переплет.»

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

Я также читал ответы на подобные вопросы в этой теме, которые я нашел здесь, в Stackoverflow и google, но они не могли мне помочь. Может быть, я чего-то упускаю, но не могу понять.

Это где я сейчас нахожусь, это называется, когда я хочу создать свою службу:

public void createServiceConnection(){ 
    musicConnection = new ServiceConnection(){ 
     @Override 
     public void onServiceConnected(ComponentName name, IBinder service) { 
      MusicService.MusicBinder binder = (MusicService.MusicBinder)service; 
      musicSrv = binder.getService(); 
      attachMusicService(); 
     } 
    }; 
} 

... Wich называет это:

public void attachMusicService(){ 
    playerFragment.setMusicService(musicSrv); 
    musicSrv.attach(context); //need this for my listeners, nevermind 
    bindService(context); 
} 

... которым называет это:

public void bindService(Context act){ 
     if(playIntent==null){ 
      playIntent = new Intent(act, MusicService.class); 
      act.startService(playIntent); 

      act.bindService(playIntent, musicConnection, Context.BIND_AUTO_CREATE); 
     }else{ 
      act.startService(playIntent); 
      act.bindService(playIntent, musicConnection, Context.BIND_AUTO_CREATE); 
     } 

//finished. I can do stuff with my Service here. 
    } 

Я что-то не понял? Я чувствую, что служба должна продолжать работать, даже активность уничтожается, потому что я сначала сделал начатую службу, а затем привязан к ней.

ответ

0

Похоже, что код был верным.

По this Question я узнал, что моя проблема была в уведомлении я показал, которым довольно интересно.

Похоже, что Служба, созданная для работы на неопределенный срок, должна иметь уведомление, которое отображаетсяstartForeground(NOTIFY_ID, notification);.

Я показал мое уведомление с notificationmanager.notify(NOTIFY_ID, notification); раньше, теперь у меня есть

`notificationmanager.notify(NOTIFY_ID, notification); 
    startForeground(NOTIFY_ID, notification);` 

и служба не будет останавливаться больше после того, как все мои связанные Работы уничтожены.

+0

Сначала вы говорите: «Похоже, мой код был прав». Тогда вы доказываете, что это не так :) – Wukash

+0

Извините. Представляем ".. код, который я разместил ..". Проблема не была включена в код, который я показал в своем Вопросе. –

+0

Да, я знаю, это просто заставило меня немного улыбнуться :). Я был уверен, что вы уже звонили в startForeground, так как это самая важная часть - сделать сервисный фон – Wukash

0

Привяжите к вашим услугам пользовательский класс приложения. Я не думаю, что вы можете сохранить работоспособность после того, как активность, связанная с ней, будет уничтожена (когда вызывается onDestroy). Вы можете сохранить работоспособность, если активность приостановлена ​​(onPause), вызвав startForeground из службы

+1

Я читал, что, когда я запускаю службу с помощью функции «startService()», это следует за жизненным циклом запущенной службы. Поэтому я могу привязать и развязать так часто, как хочу, без разрушения службы. Но вернемся к вашему ответу: Из «пользовательского класса приложений»? Что ты конкретно имеешь ввиду? –

+0

Вы можете расширить класс Application следующим образом: public class MyApplication расширяет приложение. А затем добавьте в свой манифест приложения теги: android: name = ". MyApplication". Override onCreate метод вашего приложения и привязка к сервису оттуда – Wukash

+0

звучит интересно, вы уже пробовали что-то подобное раньше? Но только что выяснил мою проблему, и теперь она работает. Если вас интересует эта тема - я отправил ответ - спасибо вам в любом случае! –

Смежные вопросы