2016-02-24 3 views
0

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

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

+0

В вашем интерфейсе supportl необходимо иметь «oneway» вызовы неблокирующих методов, которые возвращаются сразу - в вашем конструкторе для вызова метода «oneway» задайте «обратный вызов» для вашего обработчика. –

+0

Вы пробовали thread.interrupt()? – king

+0

@ user3549047 Я попытался прерывать. Но нить не была остановлена. –

ответ

0

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

Кроме того, если ваше требование не вносить их в действие, theck this link там объясняет, как остановить поток обработчика.

+0

Я пробовал это. mBTHandler.removeCallbacksAndMessages (NULL); \t \t mBTHandler = null; \t \t BTWorkerThread.quit(); \t \t if (BTWorkerThread.isAlive()) \t \t BTWorkerThread.interrupt(); \t \t BTWorkerThread = null; Но это не сработало. –