2013-06-30 4 views
1

Я программирую в среде Android, и у меня в моем проекте основное действие, в котором есть класс AsynkTask, и отдельно объект Thread, реализованный расширяемый интерфейс Runnable. Теперь AsynkTask и Thread можно рассматривать как два рабочих потока, управляемых основным потоком, то есть основной активностью. Как я могу сделать, если я хочу сделать возможным общение между двумя рабочими потоками, а не с основным потоком? Как я могу использовать обработчики для реализации этого? Я знаю, как использовать обработчики между основным и рабочим потоками. Я хочу знать, как использовать их только между рабочими потоками, потому что в этом случае я не могу передать обработчики конструкторов, потому что в этом случае я не могу напрямую создавать поток, передавая его как параметр обработчик, созданный основным потоком , Основной поток должен создать два рабочих потока, и они должны общаться без участия основного потока. Надеюсь, я был достаточно ясен.Связь между рабочими потоками

ответ

2

Если вы хотите использовать обработчик с рабочим потоком, вам необходимо создать Looper на этой теме, как описано в http://developer.android.com/reference/android/os/Looper.html.

Как это:

class LooperThread extends Thread { 
     public Handler mHandler; 

     public void run() { 
      Looper.prepare(); 

      mHandler = new Handler() { 
       public void handleMessage(Message msg) { 
        // process incoming messages here 
       } 
      }; 

      Looper.loop(); 
     } 
    } 

И тогда вы можете отправлять сообщения mHandler из любого другого Thread.

+0

Прежде всего, спасибо за ответ. Хорошо, я могу создать этот Обработчик в одном из двух рабочих потоков. Но как я могу получить сообщение в другом? – user140888

+1

Я бы создал обработчик в каждом рабочем потоке, что мешает вам это сделать? –

+0

Я думал, что это необходимо для связи между двумя рабочими потоками, что обработчик, созданный одним, передан как параметр в конструкторе другого, и это моя проблема, поскольку основной поток создает экземпляры двух рабочих потоков и когда он делает это, он не знает обработчика, созданного одним, чтобы передать его как вход в другой. – user140888