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

时间:2012-06-22 12:21:31

标签: android bluetooth handler

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

在互联网上闲逛了一会儿之后,对我来说最好的想法就是把我的班级变成一个Application子类。但是,这样做不需要我在MainMenu中初始化一个对象,这使我无法将Handler传递给它。

有没有人知道如何消除对Handler的需求,以便每次Bluetooth应用程序更改状态或接收数据时,当前Activity都可以访问它?

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

OR

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

2 个答案:

答案 0 :(得分:4)

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

  1. 您的应用程序有多项活动,但只有一项活动从蓝牙设备接收数据。
  2. 您的应用程序中的其他活动需要来自蓝牙设备的数据,但不直接从蓝牙设备接收数据。目前,您通过上述一项活动提供数据。
  3. 您不希望使用处理程序来实现此目的。
  4. 如果我的上述假设是正确的,那么你就是沿着正确的行,但你可能不想使用处理程序。

    让一个Activity处理与蓝牙设备的所有交互是完全正确的。它简化了事情,并提供了更好,更清洁的蓝牙设备处理方式。但是,您需要将这一个Activity中的数据提供给所有其他Activity,为此,您可能希望使用Broadcasts, BroadcastReceivers和Intents。有关概述,请参阅here

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

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

答案 1 :(得分:1)

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

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