Android中整个应用程序的共享内容

时间:2013-11-29 11:58:49

标签: java android design-patterns

我不是要求修复我的代码或者我只是在我的应用程序中将方法放在何处或如何放置在适当位置的问题。 我写了一个增强蓝牙聊天的应用程序 - 我为后台运行的蓝牙聊天做了服务。我会有更多这样的服务。基本上我希望能够在整个应用程序中运行方法:

  • 通过蓝牙聊天发送消息,等待回答,
  • 使用NFC扫描RFID标签,
  • 使用相机扫描条形码,

我知道如何轻松完成1项活动。现在我正在寻找一个解决方案,将它放在类似全局类的东西中,这将允许我在整个应用程序中调用这些方法 - 所以我不必初始化任何东西,只需 - doSomething(),它就可以了。 我应该把这些东西放在哪里:

  • 在自定义活动类中(我的所有其他活动都会使用它)?
  • 在申请中?
  • 别的什么?

这同样适用于处理程序。基本上,对于蓝牙聊天,您必须使用处理程序来收听收到的消息 - 在哪里放置它。

我基本上在寻找如何解决这个问题的建议。

3 个答案:

答案 0 :(得分:0)

您可以拥有一个扩展活动的BaseActivity,并将您的常用功能放在BaseActivity中,现在使用BaseActivity扩展所有其他活动。

您的活动将提供这些功能。

例如:

class BaseActivity extends activity{
...........

public void sendMsgViaBluetooth(String msg){
...........
}

}



class MyActivity extends BaseActivity{

<OnSomeEvent>{

sendMsgViaBluetooth(msg);
}

}

答案 1 :(得分:0)

我会创建一个带有一些静态方法的类,它允许您获取处理不同功能的某些类的实例。您可以创建一个侦听器系统,其中多个活动可以为事件注册自己,例如收到的消息。当主类接收到某些内容时,它将通过所有侦听器并通知它们。

否则,您也可以发送广播,并让那些感兴趣的活动听取它们。这里的一个问题是没有人在听,消息可能会丢失。当你自己处理它时,如果没有人在监听你可以将消息存储在一个队列中,并在新的监听器注册时发送它们。

我不会选择BaseActivity的想法。你的应用程序越大,它就越难(例如,如果你想让Fragment做一些事情,一个应该获得某些东西的服务,或者你想要实现其他需要扩展除Activity之外的其他类的东西)。

答案 2 :(得分:0)

要在应用程序范围内“跟随”您的数据/方法,请创建一个扩展Application的类。您必须在Manifest中指定此Class将是您的Application类。

android:name="com.example.MyApplicationClass">

之后,您可以调用getApplication()来获取Application上下文并将其强制转换为Class

myAppContext = (MyApplicationClass)getApplication();

尝试避免使用Singleton模式。我在应用程序中完成了一个,当应用程序变得足够大时,我的单例有时会被删除(从启动器返回后恢复应用程序)。即使应用程序在后台很长时间,应用程序上下文也应该保留数据。