我正在开发一个包含大约 8 个 Activity 的应用程序,以及一个用于连接嵌入式蓝牙芯片/从嵌入式蓝牙芯片接收数据的类。当我开始时,在我的初始 Activity 中初始化了一个蓝牙对象,其中有一个 Handler 从蓝牙对象接收消息。
在 Internet 上浏览了一段时间后,对我来说最好的主意似乎是将我的类变成一个 Application 子类。但是,这样做消除了我在 MainMenu 中初始化对象的需要,这消除了我将它传递给所使用的处理程序的能力。
有谁知道消除对处理程序的需要的方法,以便每次蓝牙应用程序更改其状态或接收数据时,当前 Activity 都可以访问它?
我使用这种方法的主要问题是 Activity 不知道蓝牙应用程序何时向它发送消息,应用程序等待并监听,然后在它发生时通知 Activity。
或
将处理程序写入 MainMenu,让它处理所有不同 Activity 的消息,然后将处理程序从 Activity 传递到 Activity,这对我来说是不好的做法吗?
最佳答案
我假设您正在努力实现以下目标,因为您的问题有点不清楚您的最终目标(抱歉!):
- 您的应用程序有多个 Activity,但只有一个 Activity 从蓝牙设备接收数据。
- 应用程序中的其他 Activity 需要来自蓝牙设备的数据,但不是直接从蓝牙设备接收数据。目前,您正在通过上述一项 Activity 提供数据。
- 您不想使用处理程序来实现此目的。
如果我的上述假设是正确的,那么您的方向是正确的,但您可能不想使用处理程序。
让一个 Activity 处理与蓝牙设备的所有交互是非常正确的。它简化了事情并提供了一种更好、更干净的方式来处理蓝牙设备。但是,您需要将数据从这个 Activity 获取到所有其他 Activity,为此您可能需要使用 Broadcasts, BroadcastReceivers和 Intent 。参见 here概览。
但是,如果可以的话,您可能想看看使用 LocalBroadcastManager因为这会将任何广播保留在您自己的应用程序空间内。广播是全局的,如果您出于安全考虑不需要将数据传递到您自己的应用之外,则应避免广播。
最后,你考虑过使用Fragments吗?为您的其他 Activity ?广播的另一个缺点是有额外的开销。如果您将数据保存在您的应用程序中,那么您可以创建一个由每个 fragment 实现的接口(interface),您的主要 Activity 只需调用当前所选 fragment 上的该接口(interface)。
关于android - 在多个 Activity 中使用处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11156062/