Q:

Как организовать передачу данных из Service в Activity?

Здравствуйте.
Необходимо передать данные, полученные через UART в Activity. Это можно сделать, создав в Activity поток, в котором организовать цикл while (!isInterrupted()) и вычитывать данные из буфера UART. После этого, вызвав UI поток Activity - MainActivity.this.runOnUiThread(new Runnable(), выполнить необходимые действия с этой Activity. Но если из основной Activity мы вызываем другие Activity, то организованный поток не позволяет передавать данные во вновь созданные Activity. Если я правильно понимаю, то для того чтобы данные из потока можно было передать в любую Activity, поток необходимо создавать не в Activity, а в Service.
Вопрос: по UART пришли данные, в потоке (который создан в Servce) необходимо передать данные в Activity, которая сейчас является активной, как это можно сделать и так ли это вообще делается?

A:

В каждой Activity создаёте Handler. В методе onResume() этого Activity делает bindService(). Там одним из параметров выступает interface ServiceConnection. Имплементите его хоть тем же Activity. Реализуете в нём метод onServiceConnected(). В этом callback-е одним из параметров приходит сам Service. Вот и вызовите у этого Service свой собственный метод setHandler(). Передайте туда тот Handler, который именно в текущем Activity. А вот приходящие данные по UART кидайте в Service на этот Handler. Кстати, Handler традиционно работает в главном потоке, поэтому не нужно будет runOnUiThread выполнять.

