У меня есть Sticky Service B, который запускается из службы A. Служба A завершает работу вскоре после запуска службы B. Я хочу остановить службу B из действия C. Как я могу это сделать?
Остановить службу, которая была запущена из другой службы в другом действии?
Ответы (3)
Вы можете рассмотреть возможность использования BroadcastReceiver, чтобы передать событие службе и завершить ее.
person
Andrei Tudor Diaconu
schedule
10.08.2015
Вы можете транслировать событие из любого места и ловить его, где хотите. Я предлагал создать широковещательный приемник в вашем сервисе. Или используйте любую другую систему шины событий.
- person Andrei Tudor Diaconu; 11.08.2015
Я пытался сделать то, что вы предлагаете, но служба не останавливается.
- person tanay tandon; 11.08.2015
Вам нужно позвонить stopService
из своей деятельности. Не имеет значения, была ли служба запущена действием или другой службой, если вы предоставляете допустимый контекст в своем намерении. Если Служба не привязана ни к одному из клиентов, то вызов stopService
остановит Службу.
stopService(new Intent(ActivityC.this, ServiceB.class));
Если вы хотите, чтобы Служба остановилась, вызовите stopSelf()
внутри Службы.
person
androholic
schedule
11.08.2015
http://developer.android.com/reference/android/app/Service.html#onStartCommand(android.content.Intent,%20int,%20int)
1. Создайте функцию handleStart()
private void handleStart(){
//write your code here
}
2.переопределить onStartCommand
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
if(startId == Service.START_STICKY) {
handleStart();
return super.onStartCommand(intent, flags, startId);
}else
return Service.START_NOT_STICKY;
}
3. call stopService
stopService(new Intent(ActivityC.this, ServiceB.class));
person
HenryChuang
schedule
11.08.2015