Ответ 1
Здесь хорошая статья, объясняющая потоки и общение с помощью обработчиков. Кроме того, в том же блоге есть несколько сообщений о различных конструкциях потоков в Android
Как вы реализуете двустороннюю связь между двумя потоками с Handlers в Android?
У меня есть служба A, которая порождает поток B. Довольно легко общаться с B до A, просто передать обработчик в конструктор B, но как это сделать от A до B? B не имеет никакого Looper, назначенного ему автоматически.
Кто-нибудь получил ответ?
Здесь хорошая статья, объясняющая потоки и общение с помощью обработчиков. Кроме того, в том же блоге есть несколько сообщений о различных конструкциях потоков в Android
Чтобы решить проблему получения обработчика для потока, который вы только что создали (но еще не инициализированного), см. Как создать поток Looper, а затем отправить ему сообщение немедленно?
Вызовите Looper.prepare()
в новом потоке, и Looper будет создан для вас для этого потока. Затем вы можете создать обработчик для перехода к другому потоку.
То есть, после вызова Looper.prepare()
, оператор Handler h = new Handler()
создаст обработчик на Looper вашего нового потока.
http://developer.android.com/reference/android/os/Looper.html
Вы можете выполнить следующие шаги для реализации двусторонней связи.
1) Создайте рабочий поток, который расширяет класс Thread.
2) Инициализировать обработчик с помощью этого рабочего потока.
3) В своем методе run() подготовьте петлитель для этого потока: Looper.prepare() для привязки очереди сообщений к этому потоку и Looper.loop() для создания цикла, который будет читать сообщение и runnables из очереди сообщений эта тема.
4) Отправьте MessGe и Runnables из обработчика потока пользовательского интерфейса в этот обработчик рабочего потока, используя post() для runnables и sendMessage() для сообщений.
Пожалуйста, обратитесь к этому руководству: Обработка фоновой работы с использованием Looper