2016-01-07 4 views
-1

У меня есть два вопроса, и я надеюсь, что вы можете дать мне решение без моего кода, потому что он еще не существует!Связь между двумя потоками, связь потоков через resultreceiver

Первый вопрос: Как я могу связываться между 2 нитями, что было бы самым простым способом отправить, например, целое число или строку из thread1 в thread2?

Второй вопрос: Есть ли способ связи между Деятельностью и потоком по результирующему приемнику, когда Thread ist starded службой, которая запускается Activity?

Спасибо за консультацию!

+0

http: // stackoverflow.com/questions/5657968/android-handlers-inter-thread-communication –

+0

Вопросы о коде, который не существует, на самом деле не входят в область StackOverflow, но ... –

+0

... Вероятно, самый универсальный способ связи между двумя потоками заключается в том, чтобы они делили блокирующую очередь (или две очереди, если вы хотите двустороннюю связь). Существуют и другие, более специализированные способы. Посмотрите в пакете 'java.util.concurrent' для некоторых из них. Извините, я не знаю особенностей Android. –

ответ

0

К сожалению, Ваш вопрос не все, что полезно для нас, чтобы помочь вам, (мы должны были бы код, и т.д. первый) Но я, случается, быть в состоянии дать ответы «Broad» ...

Первый вопрос: «простой» способ ... полностью субъективен ...

Прежде всего у вас есть много и много вариантов на Android (больше, чем даже просто нормальный Java) ...

вы можете использовать стандарт java concurrency stuff ...

вы можете использовать Хамеры Андроида (Обработчик сообщения и Runnables) (названное так из моего докторского советника Dr Schmidt, который имеет несколько курсов CS онлайн, которые вы можете смотреть бесплатно .. (плейлист под названием: CS 282 (2014): Concurrent Java Network Programming in Android и CS 282 (2013): Systems Programming for Android)

В факт, что параллелизм на андроиде может сделать целый университетский курс (ы) является сильным индикатором того, насколько сложна тема ...

В зависимости от «точно», как вы хотите, чтобы потоки связывались ... I лично рекомендовал бы сделать пользовательский обработчик в потоке пользовательского интерфейса и дать ссылку на потоки (если они сообщают о результатах в поток пользовательского интерфейса) или сделать обработчик в каждом потоке и разрешить er нить ссылается на него. (., Таким образом, давая потокам механизм asyncly общаться назад и вперед)

detailed video explaining Handlers

"легко" субъективна здесь ...

Второй вопрос:

Вы бы не общаться с «потоком» за сервисом ... Вы начнете сервис и обмениваетесь информацией с сервисом. Затем служба будет связываться с потоком (потоками), которым он управляет.

Я бы рекомендовал односторонний асинхронный AIDL с пользовательскими обратными вызовами для настройки службы (но это довольно продвинутый метод (который больше не буду использовать какие-либо другие средства для связанного сервиса, потому что все другие средства все на мой взгляд)

Однако до тех пор, пока вы не дойдете до этого момента, я бы предложил только после подхода 1-го вопроса о создании обработчиков, которые позволят вам передавать сообщения туда и обратно, а затем предоставлять отчет «результаты» службы к активности, когда она получает их (из одного или нескольких потоков)