Остановка службы Android из потока

#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);