将数据从服务发送到 activity 而不进行轮询

Send data from service to activity without polling

我有一项服务可以维持与外部系统的连接(蓝牙串行端口或 TCP 连接)。当在连接上接收到数据时,它应该被推送到 activity 然后可以解析和显示它。想象一下带有一些实时响应新数据的仪表的仪表板。

我不希望 activity 轮询服务数据。我希望服务在到达时将 "push" 数据发送到 activity。如何最好地实现这一目标?

我应该从该服务进行广播吗?数据(CSV 行流)将连续到达。我不知道广播是否应该如此频繁地使用——比如每秒几十次更新。

解决这个问题的标准方法是什么?

可以有两种方法:

1.使用 LocalBroadcastReceiver

在您 Activity 中注册一个 Receiver,它将侦听更改并相应地更新 UI。

2。绑定服务并传递监听器接口。

创建并实现一个Listener Interface,然后在Binding the service之后,将这个Interface的实现传递给Service。每当数据更新时调用实现方法。您可以按照此 SO 进行操作。这将是频繁更新的理想选择