在多个活动中使用处理程序

Jui*_*iCe 1 android bluetooth handler

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

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

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

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

或者

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

Ker*_*rry 5

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

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

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

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

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

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