0

В моей деятельности, я начинаю свое служение в onStart() моей деятельности & связываются службы в onResume():уничтожить и заново создать службу в моем случае

public class MyActivity extends Activity{ 

    private boolean isBound; 

    ServiceConnection myConnection = new ServiceConnection(){...}; 

    @Override 
    public void onStart(){ 
     super.onStart(); 
     startService(new Intent(this, MyService.class)); 
    } 

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

     Intent service = new Intent(this, MyService.class); 
     isBound = bindService(service, myConnection, Context.BIND_AUTO_CREATE); 
    } 
} 

У меня есть BroadcastReceiver класса, в onReceive() обратного вызова, Я хочу повторный запуск мой сервис. Я имею в виду уничтожить он полностью & Creat это по телефону startService() снова:

public class MyBroadcastReceiver extends BroadcastReceiver{ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     //I want to re-start MyService from scratch, i.e. destroy it & start it (create it) again 
     Intent service = new Intent(context, MyService.class); 
     stopService(service); 
     startService(service); 
    }  
} 

Но Android документ говорит, мой выше код не гарантирует, что предыдущее начало служба будет уничтожена, так как я также связываться Это.

Мой вопрос: что является наиболее эффективным способом UNBINDMyService в MyBroadcastReceiver перезапустить MyService с нуля? Как вы видите, связанный myConnection экземпляр находится в MyActivity ...

+0

Какова ваша мотивация необходимости перезапуска службы из scratcg, а не просто использование методов жизненного цикла для сброса состояния? – Submersed

+0

У меня есть некоторые действия в onCreate() MyService, и он должен быть там. Я хочу вызвать onCreate() из MyService, когда onReceive() вызывается в BroadcastReceiver. Это значит, что в этот момент снова начнется с нуля. –

+0

Ваша архитектура звучит довольно хоккей. Если у вас есть код в 'onCreate()' вашей 'Службы', который вы хотите выполнить, когда ваш приемник запущен, переместите этот код в отдельный метод и попросите вашего приемника' startService() 'с дополнительным в передал «Intent», который сообщает вашей службе «Service» повторно инициализировать себя. В 'onCreate()' и 'onStartCommand()' вы можете вызвать метод «initialize». –

ответ

0

Из документации Service:

Несколько клиентов могут подключиться к услуге сразу. Однако система вызывает метод onBind() вашего сервиса для извлечения IBinder только тогда, когда первый клиент связывается. Затем система доставляет тот же самый IBinder любым дополнительным клиентам, которые связывают, не вызывая onBind() еще раз.

Когда последний клиент отсоединяется от службы, система уничтожает услугу (кроме случаев, когда служба также запускалась startService()).

Таким образом, при использовании службы, не начать службу с помощью startService(intent), а скорее называется bindService(service, conn, flags). Таким образом, если ваш Activity является единственным действием, связанным с этой службой, когда вы вызываете unbindService(ServiceConnection conn), система убьет вашу услугу, после чего вы сможете переустановить ее позже.

+0

Но мне нужно начать службу. У меня есть функции в onStartCommand(), которые необходимо выполнить. –

+1

Может ли метод onBind() не выполнять одну и ту же цель? – Submersed

+0

@ Leem.fin Пожалуйста, проверьте эту ссылку для получения дополнительной информации о bind и onStartCommand и о том, как она отличается? https://groups.google.com/forum/#!topic/android-developers/xxo_Tls7CDk –

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

  • Нет связанных вопросов^_^