Как остановить заблокированный поток обработчика?

Я привязал действие к удаленной службе через интерфейс помощи. Различные другие виды деятельности также связаны с ним. Через некоторое время звонки блокируются. Когда я открываю это конкретное действие, он запускает поток обработки и вызывает некоторые удаленные методы через интерфейс помощи. Но они заблокированы, поэтому поток также блокируется. Внутри метода onDestroy() я пытаюсь выполнить handlerthread.quit(), но поток не останавливается. Поэтому каждый раз, когда я начинаю, потоки активности запускаются, но не останавливаются при уничтожении активности.

Мой вопрос: как я могу остановить обработчик, который находится в заблокированном состоянии?


person Gambler    schedule 24.02.2016    source источник
comment
Ваш интерфейс helpl должен иметь «односторонние» вызовы неблокирующих методов, которые возвращаются сразу — в вашем конструкторе для вашего «одностороннего» вызова метода определите «обратный вызов» для вашего обработчика.   -  person Mark Keen    schedule 24.02.2016
comment
Вы пробовали thread.interrupt()?   -  person king    schedule 24.02.2016
comment
@user3549047 user3549047 я пытался прервать. Но поток не был остановлен.   -  person Gambler    schedule 25.02.2016
comment
Кажется, он был заблокирован в «onTransact», ожидая ответа удаленного потока связывания.   -  person Gambler    schedule 25.02.2016


Ответы (1)


ваши вспомогательные интерфейсы могут быть двунаправленными. попробуйте сделать их oneway, что сделает их неблокирующими.

Кроме того, если вы не хотите, чтобы они выполнялись, отметьте уничтожая">эту ссылку, там объясняется, как остановить поток обработчика.

person srv_sud    schedule 24.02.2016
comment
Я попробовал это. mBTHandler.removeCallbacksAndMessages(null); mBTHandler = ноль; BTWorkerThread.quit(); if(BTWorkerThread.isAlive()) BTWorkerThread.interrupt(); BTWorkerThread = ноль; Но это не сработало. - person Gambler; 25.02.2016