这取决于你想分享的数据类型:
基本数据类型
要在应用程序共享活动/服务之间的基本数据,使用Intent.putExtras()。要传递需要保持的原始数据,请使用首选项存储机制。
非持久对象
对于共享对于短持续时间复杂非持久用户定义的对象,以下方法被建议:
的android.app.Application类
的android.app.Application是需要维护全局应用程序状态的基类。它可以通过getApplication()从任何Activity或Service进行访问。它有几个生命周期方法,如果你在AndroidManifest.xml中注册,它会自动实例化。
公共静态字段/方法
的另一种方法,使整个活动/服务数据访问是使用公共静态字段和/或方法。您可以从应用程序中的任何其他类访问这些静态字段。为了共享一个对象,创建对象的活动将一个静态字段设置为指向该对象,并且任何其他想要使用此对象的活动都将访问此静态字段。
一个HashMap在WeakReferences到对象
您还可以使用在WeakReferences的一个HashMap与长密钥对象。当一个活动想要将一个对象传递给另一个活动时,它只需将该对象放入地图中,并通过意向附加功能将该密钥(基于计数器或时间戳的唯一Long)发送给接收者活动。收件人活动使用此密钥检索对象。
一个单独的类
有使用静态辛格尔顿的优点,如可以参考他们没有铸造getApplication()到应用程序特定的类,或去挂一个接口的麻烦在你的所有应用程序子类中,以便你的各个模块可以引用该接口。
但是,静态的生命周期并不完全在你的控制之下;所以由生命周期模型遵守,应用程序类应该即使在出现一个应用程序启动,并在OnCreate()和onTerminate拆除这些静态对象()应用程序类的方法
持久对象
要继续运行,系统可能会选择终止其进程并稍后重新启动。如果您需要将数据从一个活动调用持续到下一个活动,则需要将该数据表示为活动保存的状态,通知该活动可能会消失。
对于共享复杂持久用户定义的对象,下面的方法被建议:
- 应用程序首
- 文件
- contentProviders
- SQLite的DB
如果共享数据需要保留在应用程序可以被杀死的地方,然后放置t数据存储在持久性存储中,如Application Preferences,SQLite DB,Files或ContentProviders。
” ......因此受到生命周期模型遵守,应用程序类应该开展并在OnCreate()和onTerminate推倒这些静态对象()方法应用程序类“ - 我同意这篇文章的其余部分,但觉得我应该指出onTerminate()方法从来不会在实际设备上引用(引用Android参考):”此方法用于仿真过程在生产型Android设备上永远不会调用它,在这种设备中,只需简单地删除进程即可删除进程;执行此操作时不会执行用户代码(包括此回调函数)。“ – DuneCat 2012-01-02 14:51:03