1

我正在开发一个应用程序,它有大约 8 个活动,以及一个用于将数据连接到嵌入式蓝牙芯片/从嵌入式蓝牙芯片接收数据的类。当我开始时,在我的初始 Activity 中初始化了一个蓝牙对象,其中有一个 Handler 从蓝牙对象接收消息。

在互联网上闲逛了一段时间后,对我来说最好的主意是将我的类变成一个应用程序子类。但是,这样做消除了我在 MainMenu 中初始化对象的需要,这消除了我将使用的处理程序传递给它的能力。

有谁知道消除对 Handler 的需求的方法,以便蓝牙应用程序每次更改其状态或接收数据时,当前的 Activity 都可以访问它?

这种方法的主要问题是 Activity 不知道蓝牙应用程序何时向其发送消息,应用程序等待并侦听,然后在发生时通知 Activity。

或者

将 Handler 写入 MainMenu,让它处理所有不同活动的消息,然后将 Handler 从 Activity 传递到 Activity 对我来说是不好的做法吗?

4

2 回答 2

5

我将假设您正在尝试实现以下目标,因为您的问题有点不清楚您的最终目标(对不起!):

  1. 您的应用程序有多个活动,但只有一个活动从蓝牙设备接收数据。
  2. 应用程序中的其他活动需要来自蓝牙设备的数据,但不直接从蓝牙设备接收数据。目前,您正在通过上述一项活动提供数据。
  3. 您不想使用 Handler 来实现这一点。

如果我的上述假设是正确的,那么您将沿着正确的路线前进,但您可能不想使用处理程序。

让一个 Activity 处理与蓝牙设备的所有交互是非常正确的。它简化了事情并提供了一种更好、更清洁的蓝牙设备处理方式。但是,您需要从一个 Activity 获取数据到所有其他 Activity,为了实现这一点,您可能需要使用Broadcasts、BroadcastReceivers和 Intents。有关概述,请参见此处。

但是,如果可以的话,您可能想看看使用LocalBroadcastManager,因为这会将任何广播保留在您自己的应用程序空间内。广播是全球性的,如果由于安全隐患您不需要将数据传递到自己的应用程序之外,则应避免使用广播。

最后,您是否考虑过将Fragments用于您的其他活动?广播的另一个缺点是与它们相关的额外开销。如果您将数据保存在您的应用程序中,那么您可以创建一个由您的每个 Fragment 实现的接口,并且您的主要活动只需在当前选择的 Fragment 上调用该接口。

于 2012-06-22T13:08:32.537 回答
1

您可以使用 BroadcastReceiver 类向您的活动发送广播消息。见这里http://developer.android.com/reference/android/content/BroadcastReceiver.html

当您将所需的数据放入应用程序类时,您可以将其发送到您想要的活动。只需确保活动已注册以接收该广播消息..

于 2012-06-22T13:00:20.880 回答