Запуск Bindservice после уничтожения активности

Я как бы создаю музыкальный проигрыватель со службой типа связующего. Я знаю, что если я использую связующее, я должен использовать stopSelf в действии, но есть ли способ запустить службу при уничтожении активности. У меня есть панель поиска в моей деятельности. используйте startService в OnDestroy, я получаю сообщение об ошибке в службе.

Основная деятельность

private ServiceConnection music=new ServiceConnection(){

    @Override
    public void onServiceConnected(ComponentName p1, IBinder p2)
    {
        // TODO: Implement this method
        MusicBinder binder=(MusicBinder)p2;
        registerReceiver(broadcastReciever, new IntentFilter(MusicService.BROADCAST_ACTION));
        musicSrv = binder.getService();
        musicSrv.setList(songList);
        musicBound = true;
    }

    @Override
    public void onServiceDisconnected(ComponentName p1)
    {
        // TODO: Implement this method
        if (mBroadCastIsRegistered)
        {
            try
            {
                unregisterReceiver(broadcastReciever);
                mBroadCastIsRegistered = false;}
            catch (Exception e)
            {
                e.printStackTrace();
                Toast.makeText(getApplicationContext(), e.getClass().getName() + "" + e.getMessage(), Toast.LENGTH_LONG).show();
            }
        }
        musicBound = false;
    }
};

Манифест

<service
  android:name=".Musicservice"/>

Я запускаю службу с потоком.


person Gugan Sakthivel    schedule 13.01.2016    source источник
comment
Я как бы создаю - не могли бы вы пояснить это? Вы или не вы создаете музыкальный плеер? Или вы просто адаптируете некоторые биты с открытым исходным кодом?   -  person 323go    schedule 13.01.2016


Ответы (2)


Вы можете запуститьService, а затем bindService из активности. Таким образом, когда действие может быть отвязано, когда оно будет выполнено, но музыкальный сервис будет продолжать воспроизводиться до тех пор, пока не будет вызвана функция остановки. Так что использовать оба механизма необходимо для остановки.

person bhiku    schedule 13.01.2016
comment
Извините, неправильно понял ваш вопрос. Зачем вам запускать службу с OnDestroy? - person bhiku; 13.01.2016
comment
Я хочу запустить службу даже после того, как действие будет уничтожено, но я слышал, что если я использую службу типа связующего. Служба будет уничтожена, как только действия, используемые службой, будут уничтожены. - person Gugan Sakthivel; 14.01.2016
comment
Да, попробуйте приведенное выше предложение, и служба продолжит работу, когда активность будет уничтожена. - person bhiku; 14.01.2016
comment
Какой ваш метод или метод кароли. Если это ваш метод, не могли бы вы объяснить его. - person Gugan Sakthivel; 14.01.2016

Насколько я знаю, Servive принадлежит **треду, в котором он был создан**.

Поэтому, если вы хотите, чтобы служба работала, после закрытия действия вам нужно запустить ее из другого места. Я бы порекомендовал подкласс Application ИЛИ вы можете сделать это из Activity с помощью: new Thread(){...startServiceHere...}.start();

Thread t = new Thread(){
public void run(){
getApplicationContext().bindService(
    new Intent(getApplicationContext(), MyAndroidUpnpServiceImpl.class),
    serviceConnection,
    Context.BIND_AUTO_CREATE
);}
};
t.start();

//сервисный код скопирован с @Samuh

person Karoly    schedule 13.01.2016
comment
Спасибо кароли. Я попробую это. - person Gugan Sakthivel; 14.01.2016
comment
Пробовал ваши коды, но я, если я удалю свое приложение из последних задач. Я получил исключение недопустимого аргумента со службой, не зарегистрированной msg. - person Gugan Sakthivel; 14.01.2016
comment
можете ли вы добавить код из манифеста и сообщение об ошибке, пожалуйста? Как выглядит сервисный код? Какие методы у вас переопределены? - person Karoly; 14.01.2016
comment
Отредактировал вопрос. - person Gugan Sakthivel; 14.01.2016
comment
Сервис создается только в потоке пользовательского интерфейса. Не имеет смысла размещать startService внутри нового потока. - person Vahe Gharibyan; 14.01.2018