在三个活动中处理相同的数据

ear*_*art 1 android android-activity

我在Android特定组件方面不是很有经验,所以我无法找到我需要的地方.

我有三个活动:

1st获取有关某些对象组的信息,用户选择其中一些组,并且活动需要为下一个活动加注星标

第二个活动显示来自组的所有对象,用户在之前的活动中选择的,此处用户可以取消选择一些选定的对象,然后活动开始3d活动

3d活动允许用户对所选对象执行某些操作

我的解决方案是制作一些单例模型,让活动获取并保存有关对象的信息,

但我想,android有一些特殊的组件来提供活动之间的数据

帮我找到这个组件^请

Mas*_*one 6

这取决于您要共享的数据类型:

原始数据类型
为共享活动/服务之间的数据原语在应用程序中,使用Intent.putExtras().要传递需要持久化的原始数据,请使用"首选项"存储机制.

非持久对象
为了在短时间内共享复杂的非持久性用户定义对象,建议采用以下方法:

android.app.Application类

android.app.Application是需要维护全局应用程序状态的人的基类.它可以通过getApplication()从任何Activity或Service访问.它有几个生命周期方法,如果您在AndroidManifest.xml中注册它,将自动由Android实例化.

公共静态字段/方法

使活动/服务可访问数据的另一种方法是使用公共静态字段和/或方法.您可以从应用程序中的任何其他类访问这些静态字段.要共享一个对象,它创建的对象的活动设置一个静态字段指向这个对象和要使用这个对象只是访问该静态字段的任何其他活动.

WeakReferences对象的HashMap

您还可以使用WeakReferences的HashMap到具有长键的对象.当活动想要将对象传递给另一个活动时,它只是将对象放入地图中,并通过意图附加功能将密钥(基于计数器或时间戳的唯一Long)发送给收件人活动.收件人活动使用此密钥检索对象.

Singleton类

使用静态Singleton有一些优点,例如你可以在不将getApplication()强制转换为特定于应用程序的类的情况下引用它们,或者在所有Application子类上挂起接口的麻烦,以便各种模块可以引用而是那个界面.

但是,静电的生命周期并不在你的控制之下; 为了遵守生命周期模型,应用程序类应该在Application类的onCreate()和onTerminate()方法中启动和拆除这些静态对象

持久对象
即使应用程序似乎继续运行,系统也可以选择终止其进程并在以后重新启动它.如果您需要将数据从一个活动调用持久存储到下一个活动,则需要将该数据表示为活动在被通知可能消失时保存的状态.

要共享复杂的持久性用户定义对象,建议采用以下方法:

  • 应用首选项
  • contentProviders
  • SQLite DB

如果需要在可以杀死应用程序进程的点之间保留共享数据,则将该数据放在持久存储中,如"应用程序首选项","SQLite数据库","文件"或"内容提供者".