В моей деятельности, я начинаю свое служение в 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 ...
Какова ваша мотивация необходимости перезапуска службы из scratcg, а не просто использование методов жизненного цикла для сброса состояния? – Submersed
У меня есть некоторые действия в onCreate() MyService, и он должен быть там. Я хочу вызвать onCreate() из MyService, когда onReceive() вызывается в BroadcastReceiver. Это значит, что в этот момент снова начнется с нуля. –
Ваша архитектура звучит довольно хоккей. Если у вас есть код в 'onCreate()' вашей 'Службы', который вы хотите выполнить, когда ваш приемник запущен, переместите этот код в отдельный метод и попросите вашего приемника' startService() 'с дополнительным в передал «Intent», который сообщает вашей службе «Service» повторно инициализировать себя. В 'onCreate()' и 'onStartCommand()' вы можете вызвать метод «initialize». –