#android #multithreading #android-service
#Android #многопоточность #android-service
Вопрос:
У меня есть служба, которая запускает поток во время onCreate()
. Поток отслеживает аппаратное обеспечение (IOIO) и завершится, как только оно будет отключено, поэтому, по сути, это бесконечный цикл. Остановка службы из действия работает нормально, и поток также останавливается (заканчивается на onDestory()
).
Моя проблема в том, что если поток завершается (скажем, из-за исключения), возможно ли остановить службу, которая его породила.
Я пытался использовать stopSelf()
из кода потока, но служба не останавливается.
Спасибо ps за мой первый пост, поэтому, пожалуйста, извините за любые недостающие соглашения, которым я должен был следовать.
Ответ №1:
Я думаю, что то, что вы хотите здесь, может заключаться в использовании обработчика. Прежде всего, создайте обработчик для вашего Sevrice (убедитесь, что он окончательный, чтобы его можно было использовать во всех потоках). Затем в другом вашем потоке вызовите:
myServiceHandler.post(new Runnable(){
public void run(){
stopSelf();
}
}
Комментарии:
1. У меня такая же проблема, и я попробовал это решение. Однако я вижу, что stopSelf() выполняется из потока msin … но ничего не происходит. И после этого служба по-прежнему реагирует на намерения. Есть какие-нибудь подсказки?
Ответ №2:
Как насчет сохранения намерения службы и ее прямой остановки? В службе:
private Intent thisIntent;
public int onStartCommand (Intent intent, int flags, int startId) {
thisIntent = intent;
В потоке внутри службы:
stopService(thisIntent);