我正在开发一个应用程序,它有大约8个活动,以及一个用于连接/接收来自嵌入式蓝牙芯片的数据的类。当我开始时,在我的初始活动中初始化了一个蓝牙对象,其中有一个处理程序接收来自蓝牙对象的消息。
在互联网上闲逛了一段时间后,似乎对我来说最好的想法是把我的类变成一个Application子类。但是,这样做使我不需要在MainMenu中初始化对象,也就不再需要将它传递给处理程序使用的对象。
有没有人知道一种方法来消除对处理程序的需要,以便蓝牙应用程序每次更改它的状态或接收数据时,当前活动都可以访问它?
我使用这种方法的主要问题是,活动不知道蓝牙应用程序何时向其发送消息,应用程序等待并侦听,然后在发生时通知活动。
或
将处理程序写入MainMenu,让它处理所有不同活动的消息,然后将处理程序从一个活动传递到另一个活动,这是不是一种糟糕的做法?
发布于 2012-06-22 21:08:33
我假设你正在尝试实现以下目标,因为从你的问题中你的最终目标有点不清楚(对不起!):
如果我上面的假设是正确的,那么您正在沿着正确的路线前进,但是您可能不想使用Handler。
让一个活动处理与蓝牙设备的所有交互是非常正确的。它简化了事情,并提供了一种更好、更干净的处理蓝牙设备的方式。但是,您需要将这一活动的数据传递给所有其他活动,要实现这一点,您可能需要使用Broadcasts, BroadcastReceivers和Intents。有关概述,请参阅here。
但是,如果可以的话,您可能想看看使用LocalBroadcastManager,因为这样可以将任何广播都保留在您自己的应用程序空间内。广播是全球性的,如果您由于安全问题而不需要将数据传递到您自己的应用程序之外,则应避免广播。
最后,您是否考虑过在其他活动中使用Fragments?广播的另一个缺点是存在与其相关的额外开销。如果您将数据保存在应用程序中,那么您可以创建一个由每个片段实现的接口,并且您的主活动仅在当前选择的片段上调用该接口。
发布于 2012-06-22 21:00:21
您可以使用BroadcastReceiver类向您的活动发送广播消息。查看此处http://developer.android.com/reference/android/content/BroadcastReceiver.html
当您将所需的数据放入应用程序类中时,可以将其发送到所需的活动。只需确保活动已注册,即可接收该广播消息。
https://stackoverflow.com/questions/11156062
复制相似问题