android - 在多个 Activity 中使用处理程序

标签 android bluetooth handler

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

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

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

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

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

最佳答案

我假设您正在努力实现以下目标,因为您的问题有点不清楚您的最终目标(抱歉!):

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

如果我的上述假设是正确的,那么您的方向是正确的,但您可能不想使用处理程序。

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

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

最后,你考虑过使用Fragments吗?为您的其他 Activity ?广播的另一个缺点是有额外的开销。如果您将数据保存在您的应用程序中,那么您可以创建一个由每个 fragment 实现的接口(interface),您的主要 Activity 只需调用当前所选 fragment 上的该接口(interface)。

关于android - 在多个 Activity 中使用处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11156062/

相关文章:

android - 为什么这个Android应用程序立即崩溃?

java - 将字符串转换为对象名称。 IE。 R.string.对象名

ios - 我该怎么做才能使设备不会使用蓝牙自动相互连接

Android 通过免提协议(protocol)连接到蓝牙

python - 如何在树莓派中安装 bluez 5.19

android - 从 App 到 Android 中的 SystemService 的通信

android - 发送到 GCM 设备的消息的 URL 是否正确?

android - Android native 录音机采样率

Android:具有处理程序和可运行的 ListView 中的多个计时器。 2个问题

java - 使用一个 SAX 处理程序处理不同的 XML 响应文档