Вы не объяснили, как вы в настоящее время пытаетесь использовать stopService () и какую ошибку вы получаете. Расширьте свой вопрос, и вы можете получить более полезные ответы.
Вам нужно позвонить по этой активности:
stopService(new Intent(SummaryActivity.this, SocketService.class));
Замените "SummaryActivity" на имя класса Activity, из которого вы останавливаете службу.
Убедитесь, что у вас есть несвязанный сервис из всех операций привязки, прежде чем пытаться остановить его. Как объясняют Документы Android , вы не можете остановить Службу, которая в данный момент связана с действием.
В качестве совета по проектированию: часто лучше вызывать stopSelf()
изнутри работающей службы, а не напрямую stopService()
. Вы можете добавить метод shutdown()
в свой интерфейс AIDL, который позволяет Activity запрашивать вызов stopSelf()
. Это инкапсулирует логику остановки и дает вам возможность контролировать состояние вашей Службы, когда она остановлена, аналогично тому, как вы обрабатываете Thread
.
Например:
public MyService extends IntentService {
private boolean shutdown = false;
public void doSomeLengthyTask() {
// This can finish, and the Service will not shutdown before
// getResult() is called...
...
}
public Result getResult() {
Result result = processResult();
// We only stop the service when we're ready
if (shutdown) {
stopSelf();
}
return result;
}
// This method is exposed via the AIDL interface
public void shutdown() {
shutdown = true;
}
}
Это особенно актуально, поскольку ваше имя Intent предполагает, что вы можете иметь дело с сетевыми сокетами. Вы должны убедиться, что правильно закрыли сокетные соединения, прежде чем ваша служба остановится.