【问题标题】:How do I pass data/stream from a thread to an activity in Android in real-time?如何将数据/流从线程实时传递到 Android 中的活动?
【发布时间】:2011-05-27 05:05:59
【问题描述】:

基本上,我所做的是从两个不同的项目中获取源代码并将它们拼凑在一起,以尝试创建一个实时绘制蓝牙数据的新应用程序。中间结果显然比我能够理解的要复杂。我已经提出了问题,得到了反馈,做了很多阅读,但我仍然坚持我所看到的问题:如何将数据从数据采集线程实时获取到绘图活动中?这个问题需要解释一下。

我从Blueterm的源代码开始,这是一个支持SPP/RfComm的蓝牙终端仿真程序。第一步是在我的 Android 手机上构建和运行 Blueterm,让它与外部蓝牙数据采集设备连接和通信。这很顺利 - 设备数据很好地在屏幕上滚动。

接下来我去了 AndroidPlot 并获得了 OrientationSensorExample 的源代码,并将其添加到我的项目中,以便我可以从选项菜单启动此活动。这也很顺利。我的应用程序启动了方向传感器活动,该活动实时绘制方向传感器数据,同时还在后台继续从蓝牙设备实时获取数据。

我现在要做的是修改我的应用程序,以便方向传感器活动实时绘制蓝牙数据(而不是方向传感器数据)。使用 logcat 我知道方向传感器活动正在实时绘制方向传感器数据并继续在后台实时获取蓝牙数据。

这表明了一种架构:当我的应用程序实时绘制方向传感器数据时,有一个后台线程继续实时获取蓝牙数据。或另一种看待它的方式:有一个蓝牙活动产生/生成/创建/无论后台线程(或只是一个线程),即使在我启动了方向传感器活动后仍继续运行(所有这些都通过 logcat 观察到)。

所以问题仍然存在:如何将数据从这个后台线程(由蓝牙活动启动)传递到方向传感器活动?

【问题讨论】:

  • 我有同样的问题,我正在读取来自 BT 设备的输入,该设备以非常快的速度吐出数据。我基本上每秒得到大约 6k 字节。将其更新为静态数组是不可行的。我希望为另一个线程提供的 BT 机制能够像 AudioRecord 或 Sensor 一样产生。相反,我必须使用 AsyncTask 创建一个单独的线程来处理这些数据。

标签: android multithreading android-activity background real-time


【解决方案1】:

您可以将数据设为静态,也可以使用 Android 框架的 Application 类。 这样您的后台线程会不断更新静态数据,您将在 Activity 中检索更新的数据。

【讨论】:

  • 我不明白@Sujit。能不能具体点,举个例子?
  • 您不需要从后台线程传递数据。只需将您的对象设置为静态,线程将不断更新它,您的活动将在需要时获取更新的数据。跨度>
  • 感谢@Sujit,但人们说一次只运行一项活动,所以我不能做我想做的事。但根据您的建议,我会将后台线程中的数据设为静态。现在告诉我什么活动可以阅读吗?他们是怎么读的?
  • 好的,是的@Sujit,但我迷路了。我需要:(1)使数据静态并(2)读取它。所以(1)通过执行以下操作使数据静态:静态字节[]缓冲区; BlueSentry.buffer = 缓冲区;然后(2)怎么读?
  • 请理解@Sujit 数据是通过 onSensorChanged() 读取的,那么我的静态后台线程数据如何生成此类事件?我相信这是没有人能够解决的全部问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-25
  • 1970-01-01
  • 2020-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多